有效地减去不同形状的numpy数组
Subtracting numpy arrays of different shape efficiently
使用 numpy 的优秀广播规则,您可以从具有
的形状 (5,3) 数组 X
中减去形状 (3,) 数组 v
X - v
结果是一个形状为 (5,3) 的数组,其中每一行 i
是差值 X[i] - v
。
有没有办法从 X
中减去形状 (n,3) 数组 w
以便 w
的每一行都从整个数组中减去 X
没有明确使用循环?
您需要使用 None/np.newaxis
to form a 3D array and then do subtraction by w
. This would bring in broadcasting
扩展 X
的维度,以发挥此 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)
使用 numpy 的优秀广播规则,您可以从具有
的形状 (5,3) 数组X
中减去形状 (3,) 数组 v
X - v
结果是一个形状为 (5,3) 的数组,其中每一行 i
是差值 X[i] - v
。
有没有办法从 X
中减去形状 (n,3) 数组 w
以便 w
的每一行都从整个数组中减去 X
没有明确使用循环?
您需要使用 None/np.newaxis
to form a 3D array and then do subtraction by w
. This would bring in broadcasting
扩展 X
的维度,以发挥此 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)