【发布时间】:2019-10-24 03:22:22
【问题描述】:
在 numpy 中有一个操作我发现如果不循环就很难实现
那个操作是我有两个输入:beta,x
beta.shape = (M,N,K) 和 x.shape = (I,K)
我感兴趣的操作可以使用for循环完成如下
result = np.zeros((M,N,I,K)) # buffer to save my operation results
for m in range(M):
for n in range(N):
beta_ = beta[m][n] # has shape (K,)
result[m][n] = x * beta_
在这里让我可以在没有循环的情况下使用技巧,以便整个操作可以高效计算?
【问题讨论】:
-
查看
np.einsum() -
@norok2 感谢您的回复;你指的是解决第二个问题吗?
-
@Ruzihm;谢谢,您可以删除第一个问题,但保留第二个问题
-
利用广播:
result = beta[:,:, None, :] * x。没有求和,所以不需要einsum(尽管它工作正常)。 -
对于问题的删除部分,
beta.transpose(1,0,2)会切换前2个维度。