2017-08-15 2 views
-3

とバッチでベクトル乗算を実行しない場合はD = 4どのように、例えば、I形状のベクトル[1、D]</p> <p>を有するパイソン

v = np.array([[1, 2, 3, 4]]) # shape = [1,4] 

と行う

np.dot(v.T,v) 

結果は

Out[80]: 
array([[ 1, 2, 3, 4], 
     [ 2, 4, 6, 8], 
     [ 3, 6, 9, 12], 
     [ 4, 8, 12, 16]]) 

となりました。私はたくさんのvectを持っていますORS、と彼らは私が最も効率的な方法

PSで結果を取得できますか

D寸法とNベクトルだ[N、D]

の形状である。結果は次のようになり形状の[n、D、D]のnumpy.ndarray

+0

'[[1、2]、[1,2]] 'の出力の例を挙げることができますか? –

+0

array([[1,2]、[2,4]]、[[4,2]、[2,1]]]) –

+1

'np.einsum'と' np.matmul'がこれを処理できます。実際にはこれは外側の製品なので、それらは必要ありません。放送はそれを処理することができます。 – hpaulj

答えて

1
In [758]: v = np.array([[1, 2, 3, 4]]) 
In [759]: v2 = np.vstack([v,v]) 
In [760]: v2.shape 
Out[760]: (2, 4) 
In [761]: v2[:,None,:]*v2[:,:,None] 
Out[761]: 
array([[[ 1, 2, 3, 4], 
     [ 2, 4, 6, 8], 
     [ 3, 6, 9, 12], 
     [ 4, 8, 12, 16]], 

     [[ 1, 2, 3, 4], 
     [ 2, 4, 6, 8], 
     [ 3, 6, 9, 12], 
     [ 4, 8, 12, 16]]]) 
In [762]: _.shape 
Out[762]: (2, 4, 4) 

私は外製作のために放送を使用しています。

In [765]: np.array([[[1, 2], [2, 4]],[[4, 2],[2, 1]]]) 
Out[765]: 
array([[[1, 2], 
     [2, 4]], 

     [[4, 2], 
     [2, 1]]]) 

数字がありますが、第二面が反転している:あなたのコメントの例に対してチェック

In [763]: x2= np.array([[1, 2], [1, 2]]) 
In [764]: x2[:,None,:]*x2[:,:,None] 
Out[764]: 
array([[[1, 2], 
     [2, 4]], 

     [[1, 2], 
     [2, 4]]]) 

あなたは望んでいました。それは本当にあなたが望むものですか?明らかに、ディメンションがどのようにマップされるかにあいまいさがあります。これが本当に必要なものなら、それを繰り返し行う方法を説明してください。 einsum


この外積はmatmul

In [770]: np.einsum('ij,ik->ijk', x2,x2) 
Out[770]: 
array([[[1, 2], 
     [2, 4]], 

     [[1, 2], 
     [2, 4]]]) 

ある式がある:v2[:,:,None]@v2[:,None,:]

+0

ありがとう、それは私が必要とするものです。 –

関連する問題