Numpy:向矩阵列添加向量

Sou*_*nak 7 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]])
Run Code Online (Sandbox Code Playgroud)

这是行添加.如何将列添加到列中以获取

In [65]: result
Out[65]: 
array([[ 7,  8],
       [11, 12]])
Run Code Online (Sandbox Code Playgroud)

我不想转置整个数组,添加然后转置回来.还有其他方法吗?

unu*_*tbu 13

添加一个newaxis到最后a[:,-1],以便它有形状(2,1).b然后添加将沿着列(第二轴)而不是行(这是默认值)广播.

In [47]: b + a[:,-1][:, np.newaxis]
Out[47]: 
array([[ 7,  8],
       [11, 12]])
Run Code Online (Sandbox Code Playgroud)

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

  • 注意DSM的(删除的)答案显示了一种更快的方式来生成形状切片`(2,1)`:`a [:, - 1,np.newaxis]`而不是`a [:, - 1] [:, np.newaxis]`.阅读[基本切片规则](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing),了解其工作原理.很酷. (4认同)