2.5 训练场
2.5.1 给定一个4维矩阵,如何得到最后两维的和?(提示,指定axis进行计算)
import numpy as np arr = np.random.randint(0, 10, size = (2, 3, 4, 5)) display(arr) display(arr.sum(axis = 0)) # 第0维的数据进行加和 display(arr.sum(axis = 1)) # 第1维的数据进行加和 display(arr.sum(axis = -1)) # 最后一维的数据进行加和 # 最后两维的和 # 写法一: display(arr.sum(axis = (-1, -2))) # 写法二: display(arr.sum(axis = (2, 3)))
2.5.2 给定数组[1, 2, 3, 4, 5],如何得到在这个数组的每个元素之间插入3个0后的新数组?
import numpy as np arr1 = np.arange(1, 6) display(arr1) # 每个元素之间插入3个0,共插入3*4=12个0 # 再加上初始的5个值,共需要17个位置 # 创建一个长度为17的全部是0的数组 arr2 = np.zeros(shape = 17, dtype = np.int16) display(arr2) # 有间隔的,每4个取一个,取出数据并进行替换 arr2[::4] = arr1 display(arr2)
2.5.3 给定一个二维矩阵(5行4列),如何交换其中两行的元素(提示:任意调整,花式索引)?
import numpy as np arr = np.random.randint(0, 100, size = (5, 4)) display(arr) # 使用花式索引进行交换 arr = arr[[0, 2, 1, 3, 4]] display(arr)
2.5.4 创建一个100000长度的随机数组,使用两种方法对其求三次方(1、for循环;2、NumPy自带方法),并比较所用时间
%%time
:可以显示代码的运行时间,这个执行时间会和电脑的性能挂钩
使用 for 循环
%%time import numpy as np arr = np.random.randint(0, 10, size = 100000) res = [] for item in arr: res.append(item ** 3)
使用NumPy自带方法
%%time import numpy as np arr = np.random.randint(0, 10, size = 100000) res = [] arr2 = np.power(arr, 3)
可以发现,使用 NumPy 自带方法运行效率要远远高于使用 for 循环
2.5.5 创建一个5行3列随机矩阵和一个3行2列随机矩阵,求矩阵积
import numpy as np A = np.random.randint(0, 10, size = (5, 3)) B = np.random.randint(0, 10, size = (3, 2)) display(A, B) # 调用 NumPy 函数 dot print('方式一:\n', np.dot(A, B)) # 调用对象方法 print('方式二:\n', A.dot(B)) # 使用符号计算 print('方式三:\n', A @ B)