Numpy:向矩阵列添加向量

时间:2015-07-23 12:45:34

标签: python numpy

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]])

我不想转置整个阵列,添加然后转置回来。还有其他办法吗?

1 个答案:

答案 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的轴(即沿其列)进行广播。