2017-11-03 1 views
-2

私はPythonで配列があります。この配列ではnumpy配列の複数のベクトルのドット積を一度にすべて取り出すことはできますか?

testarray = np.array([1,2,3,4,5),[6,7,8,9,10],[11,12,13,14,15]) 

を、私は最初のベクトルの内積と第二のベクターとその残り1,2,3,4,5 = 1を取りたいです第三は私は後でこの数値を数式にも実装します。

どうすればいいですか?最初のベクトルと私のnumpy配列内の他のすべての単一ベクトルの内積を取る?

私の例のように3つのベクターがある場合は、3つの異なる番号が必要です。それはまた、pythonを持っていることは可能ですか?

+2

質問にスクリプトを追加してください。 – yacc

+1

何を求めているのか不明です。あなたのリストから2つのベクトルの任意の組み合わせのためのドットプロダクトを求めていますか? –

+1

サンプルの予想出力を明確にリストしますか? – Divakar

答えて

0

あなたが最初のベクトルのペアと他のすべてのベクトル一つ一つ間の内積をしたいと仮定すると:

import numpy as np 

testArray = ([1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]) 
dotProducts = np.array([]) 

for eachVector in range(1, len(testArray)): 
    dotProducts = np.append(dotProducts, np.dot(testArray[0], testArray[eachVector])) 

は、あなたの、アレイ内のすべてのベクトルを反復処理、あなたの内積のための空の配列を作成しますドットプロダクトを計算してからdotProduct配列に追加します。

最初のものと他の1つおきに計算する場合は、dotProductの結果に2つの要素があります。あなたも最初のベクトルが含まれている場合:

for eachVector in range(len(testArray)): 

は、あなたがあなたのリストから2つのベクトルのすべての組み合わせについて内積をしたいと仮定すると、三つの要素

1

を持って、あなたはitertools.combinationsを使用することができます。

>>> a = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]) 
>>> [x.dot(y) for x, y in itertools.combinations(a, 2)] 
[130, 205, 530] 

あなたはまた、ベクトルのインデックスをしたい場合は、enumerateであることを兼ね備え:

>>> [(i, k, x.dot(y)) for (i, x), (k, y) in itertools.combinations(enumerate(a), 2)] 
[(0, 1, 130), (0, 2, 205), (1, 2, 530)] 
1

あなたは形状のアレイ間のドット積を計算することによって、あなたの結果を達成することができます(5)及び(5 、2)または(2,5)および(5、)。 mxnとpxqの行列を掛けるには、n == pである必要があることに注意してください。だから、numpyの中で:あなたは自分自身とあなたのベクトルの内積が必要な場合は

In [38]: np.dot(testarray[0], testarray[1:].T) 
Out[38]: array([130, 205]) 
In [39]: np.dot(testarray[1:], testarray[0]) 
Out[39]: array([130, 205]) 

これは遅い(しかし、あなたの例では、単に2つの要素のために無視できる)であるPythonで配列を超えるサイクリング、

を回避し、このようにしてください:

In [40]: np.dot(testarray[0], testarray.T) 
Out[40]: array([ 55, 130, 205]) 

ドットプロダクトの結果が注文されます。最初のベクトル、次に2番目のベクトル、3番目のベクトル。

関連する問題