【发布时间】:2020-06-04 15:19:14
【问题描述】:
我无法理解documentation of np.einsum()。 subscripts 是如何解释的?
我正在尝试编写np.einsum('a...c,b...c', Y, conj(Y)),其中Y 是原始python 上形状为C, F, T 的矩阵。此外,由于之前的实现差异,我的 MATLAB Y 的大小为 [F, T, C]。
'a...c,b...c' 在每个组件中的索引是什么?我很困惑。
如何在 MATLAB 中编写相同的指令?
【问题讨论】:
-
您是否在 SO 上寻找有关此主题的问题?一个例子 - Element-wise matrix multiplication for multi-dimensional array
-
我做了,但我错过了你的链接。我现在正在阅读它。
-
这对我没有帮助。例如,我不明白为什么'mki'是
5,3,1。这些字母代表什么?这些是“A”的指数吗?如果是这样,他们应该是2,2,2000吗? -
如果你错过了,那一定是你没用过“按标签搜索”功能,here's an example搜索matlab+numpy-einsum(返回5个问题,包括这个和那个我链接)。
5,3,1是维度的顺序。因此,如果一个矩阵的大小为[20,3,500,100,4,2],它指的是大小为 2 的维度,然后是大小为 100 的矩阵,最后是大小为 3 的矩阵(考虑到 python 的基于 0 的索引)。 -
Y和Y.conj()都是相同形状的 3d 数组,所以a...c是隐含的aic和b...c是隐含的bic,而缺少的 @987654344 @ 使其等同于aic, bic -> iab。这又与(Y.transpose(1, 2, 0)[..., None] * Y.conj().transpose(1, 2, 0)[:, :, None, :]).sum(1)相同:将第一个数组的[F, T, C]形状变成[T, C, F, 1],第二个变成[T, C, 1, F],广播到[T, C, F, F],最后将第二个维度相加得到[T, F, F],即希望正是你得到的。我会在einsum调用中明确说明以使其可读。
标签: matlab permutation ellipsis code-translation numpy-einsum