Python numpy数组乘法

时间:2016-11-19 23:33:12

标签: python numpy dot-product numpy-broadcasting

如果我必须使用数组X(X有n行和k列)和Y(Y有n行和q列),我如何在向量形式中将两者相乘,这样我就可以获得具有以下特征的数组Z:

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 个答案:

答案 0 :(得分:2)

从你的描述中,几乎没有想到:

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

我也可以用np.dot写一个或两个转置。 np.dot矩阵总和超过第2个的最后一个和第2个的最后一个

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]])