2013-03-25 8 views
5

2つの配列間の対応する各行の外積をとる最善の方法は何ですか?たとえば:Python/Numpy - 2つの配列の一致する行のクロスプロダクト

a = 20x3 array 
b = 20x3 array 
c = 20x3 array = some_cross_function(a, b) where: 
c[0] = np.cross(a[0], b[0]) 
c[1] = np.cross(a[1], b[1]) 
c[2] = np.cross(a[2], b[2]) 
...etc... 

私は、これは、単純なPythonのループまたはnumpyののapply_along_axisを使用して行うことができます知っているが、完全にnumpyのの基礎となるCのコード内でこれを行うには、何か良い方法があれば、私は思ったんだけど。私は現在、単純なループを使用していますが、これは私のコードの中で最も遅い部分です(実際の配列は何万行もあります)。

答えて

5

私のミスを認識したら、この回答を数分で削除する必要がありますが、明白なことはありませんか?

>>> a = np.random.random((20,3)) 
>>> b = np.random.random((20,3)) 
>>> c = np.cross(a,b) 
>>> c[0], np.cross(a[0], b[0]) 
(array([-0.02469147, 0.52341148, -0.65514102]), array([-0.02469147, 0.52341148, -0.65514102])) 
>>> c[1], np.cross(a[1], b[1]) 
(array([-0.0733347 , -0.32691093, 0.40987079]), array([-0.0733347 , -0.32691093, 0.40987079])) 
>>> all((c[i] == np.cross(a[i], b[i])).all() for i in range(len(c))) 
True 
+0

あなたは正しいです。私はこれを試して問題を抱えていると思ったが、私はそれをやり直してみたところ、うまくいった。私は最初に間違った何かをしたに違いない。ありがとう。 –

関連する問題