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]])
我不想转置整个数组,添加然后转置回去。还有其他办法吗?
最佳答案
在 a[:,-1]
的末尾添加一个新轴,使其形状为 (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 的轴(即沿其列)被广播。
关于python - Numpy:逐列向矩阵添加向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587802/