如果我必须数组 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)
如果我必须数组 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)
从你的描述来看,几乎没有想到:
Z=np.einsum('nk,nq->kq',X,Y)
我也可以用np.dot
, 用一两个转置来写。 np.dot
矩阵在第 1 和第 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]])