2016-11-19 10 views
0

配列X(Xはn行とk列)とY(Yはn行とq列)の場合、ベクトル形式で2を掛け合わせると、配列Zあなたの説明からPython numpy配列の乗算

Z[0]=X[:,0]*Y 
Z[1]=X[:,1]*Y 
Z[2]=X[:,2]*Y 
... 
Z[K-1]=X[:,k-1]*Y 
Z[K]=X[:,k]*Y 

for c in range(X.shape[1]): 
    Z[c]=X[:,c].dot(Y) 
+1

の最後にするん'Z'の最終形状? (k、)? (k、q)あなたは 'n 'サイズを合計していますか?詳細はどうぞ。小さな2x3x4の例もありますので、私たちはあなたを理解しています。 – hpaulj

+0

Zの最終形状は(k、q)である。私はループのバージョンをすぐにポスティングしようとする場合はそれが役立つかもしれません。 – 1nsg

+0

上記のループバージョンをご覧ください。 – 1nsg

答えて

2

、ほとんどない思考::次の特性を持つ

Z=np.einsum('nk,nq->kq',X,Y) 

私はまた、転置または2で、np.dotでそれを書くことができます。 np.dotは、第一及び第二の最後の薄暗い以上の行列の和は何第二

Z = np.dot(X.T, Y) 

=================

In [566]: n,k,q=2,3,4 
In [567]: X=np.arange(n*k).reshape(n,k) 
In [568]: Y=np.arange(n*q).reshape(n,q) 
In [569]: Z=np.einsum('nk,nq->kq',X,Y) 
In [570]: Z 
Out[570]: 
array([[12, 15, 18, 21], 
     [16, 21, 26, 31], 
     [20, 27, 34, 41]]) 
In [571]: Z1=np.empty((k,q)) 
In [572]: Z1=np.array([X[:,c].dot(Y) for c in range(k)]) 
In [573]: Z1 
Out[573]: 
array([[12, 15, 18, 21], 
     [16, 21, 26, 31], 
     [20, 27, 34, 41]]) 
In [574]: X.T.dot(Y) 
Out[574]: 
array([[12, 15, 18, 21], 
     [16, 21, 26, 31], 
     [20, 27, 34, 41]]) 
関連する問題