a
Out[57]:
array([[1, 2],
[3, 4]])
b
Out[58]:
array([[5, 6],
[7, 8]])
In[63]: a[:,-1] + b
Out[63]:
array([[ 7, 10],
[ 9, 12]])
这是行添加。如何按列添加它们以获取
In [65]: result
Out[65]:
array([[ 7, 8],
[11, 12]])
我不想转置整个阵列,添加然后转置回来。还有其他办法吗?
答案 0 :(得分:10)
在a[:,-1]
的末尾添加newaxis,使其形状为(2,1)
。然后使用b
添加broadcast沿着列(第二个轴)而不是行(这是默认值)。
In [47]: b + a[:,-1][:, np.newaxis]
Out[47]:
array([[ 7, 8],
[11, 12]])
a[:,-1]
的形状为(2,)
。 b
的形状为(2,2)
。默认情况下,广播在左侧添加新轴。因此,当NumPy计算a[:,-1] + b
时,其广播机制会将a[:,-1]
的形状更改为(1,2)
并广播为(2,2)
,并沿其长度轴显示值1(即沿着它的行)进行广播。
相比之下,a[:,-1][:, np.newaxis]
的形状为(2,1)
。因此,广播将其形状改变为(2,2)
,沿其长度为1的轴(即沿其列)进行广播。