2016-05-15 19 views
1

セットアップ

import numpy as np 

A = np.array([[1, 2], [2, 3]]) 
B = np.array([[1, 1], [2, 2], [4, 3]]) 

A 

array([[1, 2], 
     [2, 3]]) 

B 

array([[1, 1], 
     [2, 2], 
     [4, 3]]) 

IはBの各行にAの最初の行の差を取る必要があります。私が行う場合:私はちょうどB.放送numpyの差

の各行非ベクトル化のアプローチのためにこれを必要と

A - B[0] 

array([[0, 1], 
     [1, 2]]) 

は次のとおりです。

np.array([A - B[i] for i in range(B.shape[0])]) 

array([[[ 0, 1], 
     [ 1, 2]], 

     [[-1, 0], 
     [ 0, 1]], 

     [[-3, -1], 
     [-2, 0]]]) 

質問

にベクトル化されたアプローチとは何ですか同じ3次元配列を取得しますか?私はパンダを使うと大丈夫です。

答えて

2

最も簡単な方法は、それを適切に放送するnumpyのためのあなたのB配列に次元を追加することです:

In [15]: A - B[:, np.newaxis] 
Out[15]: 
array([[[ 0, 1], 
     [ 1, 2]], 

     [[-1, 0], 
     [ 0, 1]], 

     [[-3, -1], 
     [-2, 0]]]) 
+0

配列の次元が拡張されているか、それはこの例であることは注目に値するかもしれ把握しやすくするために、 '' B [:、np.newaxis] '' B [:、np.newaxis、:] ''と同等である – Tonechas