与3d阵列的numpy广播

时间:2017-09-08 18:40:34

标签: python arrays numpy numpy-broadcasting

是否可以应用numpy广播(使用1D阵列),

x=np.arange(3)[:,np.newaxis]
y=np.arange(3)
x+y=
array([[0, 1, 2],
       [1, 2, 3],
       [2, 3, 4]])

到类似于下面的三维矩阵,这样a [i]中的每个元素都被视为一维向量,如上例所示?

a=np.zeros((2,2,2))
a[0]=1
b=a
result=a+b

导致

result[0,0]=array([[2, 2],
                   [2, 2]])

result[0,1]=array([[1, 1],
                   [1, 1]])

result[1,0]=array([[1, 1],
                   [1, 1]])

result[1,1]=array([[0, 0],
                   [0, 0]])

2 个答案:

答案 0 :(得分:3)

您可以采用与1d数组相同的方式执行此操作,即在{0}}或a中的轴0和轴1之间插入新轴:

b
a + b[:,None]    # or a[:,None] + b

答案 1 :(得分:1)

由于member_id | customer_name | customer_phone| sum_qty | sum_ammount NULL | Sam | 123xxxx | 1 | 20720 NULL | Tanpa Pelanggan| - | 3 | 51800 a具有相同的形状(2,2,2),所以a + b确实可以工作。 广播的工作方式是匹配操作数的维度,从最后一个维度开始向上。如果尺寸匹配,则考虑下一个尺寸。

如果尺寸不匹配,并且如果其中一个尺寸为b,则该操作数的尺寸将重复以匹配另一个操作数(例如,如果a.shape =(2,1,2)和b.shape =(2,2,2)然后重复a的一维值以使shape =(2,2,2))