Numpy:如何用向量元素除以每一行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (137)

假设我有一个numpy数组:

data = np.array([[1,1,1],[2,2,2],[3,3,3]])

我有一个对应的"vector:"

vector = np.array([1,2,3])

我该怎么做data沿着每一行减去或除以,结果是:

sub_result = [[0,0,0], [0,0,0], [0,0,0]]
div_result = [[1,1,1], [1,1,1], [1,1,1]]

如何对二维数组的每一行执行与每一行对应的一维标量数组的操作?

提问于
用户回答回答于

你只需要用None(或另一种选择)np.newaxis)与广播相结合:

In [6]: data - vector[:,None]
Out[6]:
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])

In [7]: data / vector[:,None]
Out[7]:
array([[1, 1, 1],
       [1, 1, 1],
       [1, 1, 1]])
用户回答回答于

None或与np.newaxes是个很好的方法。另一种选择是使用转置和广播,如

(data.T - vector).T

(data.T / vector).T

对于高维数组,您可能需要使用swapaxesNumPy阵列或NumPy方法rollaxis函数

扫码关注云+社区