12

使用 numpy 的优秀广播规则,您可以v从形状 (5,3) 数组X中减去形状 (3,) 数组

X - v

结果是一个形状 (5,3) 数组,其中每一行i都是差异X[i] - v

有没有办法从中减去一个形状 (n,3) 数组wX以便在不显式使用循环的情况下w从整个数组中减去每一行?X

4

1 回答 1

20

您需要扩展 with 的维度XNone/np.newaxis形成 3D 数组,然后进行减法w。这将在broadcasting此操作中发挥作用,3D并产生形状为 的输出(5,n,3)。实现看起来像这样 -

X[:,None] - w  # or X[:,np.newaxis] - w

相反,如果所需的顺序是(n,5,3),那么您需要扩展 的尺寸w,如下所示 -

X - w[:,None] # or X - w[:,np.newaxis] 

样品运行 -

In [39]: X
Out[39]: 
array([[5, 5, 4],
       [8, 1, 8],
       [0, 1, 5],
       [0, 3, 1],
       [6, 2, 5]])

In [40]: w
Out[40]: 
array([[8, 5, 1],
       [7, 8, 6]])

In [41]: (X[:,None] - w).shape
Out[41]: (5, 2, 3)

In [42]: (X - w[:,None]).shape
Out[42]: (2, 5, 3)
于 2015-11-12T17:14:56.767 回答