【发布时间】:2020-12-27 21:01:19
【问题描述】:
我手头有以下问题。 F 是一个维度为 2 X 100 X 65 的 NumPy 数组。我想生成另一个数组V,其维度为2 X 2 X 65。此数组V 必须按以下方式计算:
对于每个t、V[:, :, t] = F[:, :, t] @ F[:, :, t].T,其中.T 表示矩阵转置,@ 表示通常的矩阵乘法。现在,我正在使用以下方法:
aux_matrix = np.matmul(np.transpose(F, (2, 0 ,1)), np.transpose(F, (2, 1, 0)))
V = np.transpose(aux_matrix, (1, 2, 0))
我知道np.tensordot 和np.einsum 可以帮助解决这种情况,让事情变得更快、更优雅。然而,我是张量的新手,我不习惯爱因斯坦符号。有人可以提供一些关于如何执行此计算的信息,并可能在此处链接指导初学者的参考吗?谢谢!
【问题讨论】:
-
我读到了,但我仍然无法解决我的问题@wwii。我不知道 np.eisum 是否真的可以在这里使用,或者我是否需要张量积。
-
我以为问题是
link a reference guiding a beginner here? -
感谢您提供该链接。我试图将我的问题放在其中一个示例中,但我没有这样做。我认为这是“批量乘法”的情况,但我不确定。
-
您的
matmul使用没有问题。它可能会比einsum更快。如果批量维度是第一个,它会更简单。在 numpy 中,前导维度是最外层的,最适合批量使用。
标签: python numpy transpose tensor numpy-einsum