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没有区别。

 

 

posted on 2021-06-07 16:42  paike123  阅读(294)  评论(0编辑  收藏  举报

导航