numpy の優れたブロードキャスト ルールを使用するとv
、形状 (5,3) 配列から形状 (3,) 配列X
を減算できます。
X - v
結果は、各行i
が差である形状 (5,3) 配列X[i] - v
です。
ループを明示的に使用せずに、配列全体から各行が減算w
さX
れるように、形状 (n,3) 配列を減算する方法はありますか?w
X
numpy の優れたブロードキャスト ルールを使用するとv
、形状 (5,3) 配列から形状 (3,) 配列X
を減算できます。
X - v
結果は、各行i
が差である形状 (5,3) 配列X[i] - v
です。
ループを明示的に使用せずに、配列全体から各行が減算w
さX
れるように、形状 (n,3) 配列を減算する方法はありますか?w
X
X
withの次元を拡張しNone/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)