12

numpy の優れたブロードキャスト ルールを使用するとv、形状 (5,3) 配列から形状 (3,) 配列Xを減算できます。

X - v

結果は、各行iが差である形状 (5,3) 配列X[i] - vです。

ループを明示的に使用せずに、配列全体から各行が減算wXれるように、形状 (n,3) 配列を減算する方法はありますか?wX

4

1 に答える 1

20

Xwithの次元を拡張し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)
于 2015-11-12T17:14:56.767 に答える