0

如果我必须数组 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)
4

1 回答 1

2

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

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]])
于 2016-11-19T23:56:01.827 回答