【发布时间】:2021-10-07 03:47:17
【问题描述】:
我有一个二维矩阵 A[1000*90] 和 B[90*90*1000]
我要计算C[1000*90]
For i in range(1000)
C[i,:]=np.matmul(A[i,:],B[:,:,i]
我知道如果我使用矢量化公式会更快,似乎 einsum 可能是我正在寻找的函数,但我在输入 einsum 的语法时遇到了麻烦。是np.einsum(ij,jki->ik,A,B)吗?
【问题讨论】:
-
你是对的,einsum 就是你想要的。如果你的尝试是正确的(对我来说看起来不错),我自己还不够专业,无法通过眼睛告诉你。但是您可以通过一些小例子轻松说服自己...
-
matmul处理“批量”乘法。您在文档中没有看到吗?您可能需要添加维度和转置,因此i是 3 个维度中的第一个。 -
@Walterwang201112 IMO 你的
einsum看起来不错。你为什么不“试试看”?有问题吗? -
您的 einsum 是正确的,但 @hpaulj 方式更有效,因为它直接调度到链接的 BLAS 库(如果有)。
标签: python numpy vectorization numpy-einsum