如果我必须使用数组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)
答案 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]])