4-数组的运算
1:广播机制
执行 broadcast 的前提在于,两个 ndarray 执行的是 element-wise的运算,Broadcast机制的功能是为了方便不同形状的ndarray(numpy库的核心数据结构)进行数学运算。
当操作两个数组时,numpy会逐个比较它们的shape(构成的元组tuple),只有在下述情况下,两个数组才能够进行数组与数组的运算。
- 维度相等
- shape(其中相对应的一个地方为1)
2: 数组的广播规则
#1:如果俩个数组的维度的个数不同,那么小维度的数组会在左边补1 a=np.array([1,2,3]) a+5 #即 [1,2,3] + [5,5,5] array([6, 7, 8]) #2:如果两个数组在任何一维度不匹配,数组的形状会在维度为1的维度上扩展,到匹配上另一个数组的形状 a = np.arange(3) a array([0, 1, 2]) b = np.arange(3).reshape(3,1) b array([[0], [1], [2]]) a+b #即: [[0, 1, 2], [0, 1, 2], [0, 1, 2]] + [[0, 0, 0], [1, 1, 1], [2, 2, 2]] array([[0, 1, 2], [1, 2, 3], [2, 3, 4]]) #3:如果没有维度的形状为1,则会抛出异常 a = np.arange(6).reshape(3,2) a array([[0, 1], [2, 3], [4, 5]]) b= np.arange(6).reshape(2,3) b array([[0, 1, 2], [3, 4, 5]]) a+b --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-41-ca730b97bf8a> in <module> ----> 1 a+b ValueError: operands could not be broadcast together with shapes (3,2) (2,3)
5 矩阵运算
5.1 矩阵乘法api:
- np.matmul
- np.dot
>>> a = np.array([[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]]) >>> b = np.array([[0.7], [0.3]]) >>> np.matmul(a, b) array([[81.8], [81.4], [82.9], [90. ], [84.8], [84.4], [78.6], [92.6]]) >>> np.dot(a,b) array([[81.8], [81.4], [82.9], [90. ], [84.8], [84.4], [78.6], [92.6]])
np.matmul和np.dot的区别:
二者都是矩阵乘法。 np.matmul中禁止矩阵与标量的乘法。 在矢量乘矢量的內积运算中,np.matmul与np.dot没有区别。