广播机制:通过扩展实现数组运算

来自CloudWiki
110讨论 | 贡献2020年5月16日 (六) 11:37的版本 numpy数组的广播机制
跳转至: 导航搜索

numpy数组的广播机制

  • 注意numpy里数组之间的运算和线性代数中的矩阵运算是不一样的
  • 同纬度和形状的数组之间就是同位置的元素两两匹配运算的结果


import numpy as np
a=np.array([[ 1., 2., 1.], [ 1., 2., 1.]])
b=np.array([[ 1., 2., 3.], [ 1., 2., 3.]])
print(a.shape,b.shape)
>>>(2, 3) (2, 3)
print(a+b)
>>>array([[ 2., 4., 4.],[ 2., 4., 4.]])
print(a*b)
>>>array([[ 1., 4., 3.],[ 1., 4., 3.]])
print(a-b)
>>>array([[ 0., 0., -2.],[ 0., 0., -2.]])
print(a**b)
>>>array([[ 1., 4., 1.],[ 1., 4., 1.]])


  • 当两个数组其中一个的维度少于另外一个的时候

少的数组在某一个轴(或是多个轴)的方向缺失数据,缺数据的那个方向只能有1个元素(或是一行,一面)作为复制蓝本,然后依照轴的方向复制,复制数由多的那个数组的大小决定



a=np.array([[ 1., 2., 1.],

           [ 1.,  2.,  1.]])
  1. 数组与常数的相加可以看成把常数按照数组的形状进行复制然后在相加的过程print(a+5)print(a+np.array([[ 5., 5., 5.],
                 [ 5.,  5.,  5.]]))

[[ 6. 7. 6.]

[ 6.  7.  6.]]

[[ 6. 7. 6.]

[ 6.  7.  6.]]