设X是shape (N,D)的数组,gamma是shape (N,K)的数组。
现在我想计算所有向量的加权和D-dimensional k = 0,1,2,...K-1:
s[k] = gamma[1,k]*X[1,:] + ... + gamma[N,k]*X[N,:]
如何在numpy中高效地执行此操作
发布于 2021-02-09 21:24:20
这可以通过使用np.dot来实现
import numpy as np
N = 3
D = 5
K = 2
x = np.arange(N*D).reshape((N,D))
gamma = np.arange(N*K).reshape((N,K))
# (K,N) , (N,D) -> (K,D)
np.dot(gamma.T,x) # equivalently, np.matmul(gamma.T,x) or gamma.T @ x
>>> array([[ 50, 56, 62, 68, 74],
[ 65, 74, 83, 92, 101]])它很容易用显式的for循环验证求和:
for k in range(K):
gamma[0,k]*x[0,:] + gamma[1,k]*x[1,:] + gamma[2,k]*x[2,:]
>>> array([50, 56, 62, 68, 74])
>>> array([65, 74, 83, 92, 101])或者,如果你喜欢爱因斯坦求和符号,你可以尝试使用np.einsum
np.einsum('ji,jk', gamma, x) https://stackoverflow.com/questions/66119573
复制相似问题