![](/img/trans.png)
[英]Numpy einsum fails for matrix product with unspecified leading and trailing axes
[英]numpy einsum to get axes permutation
我在'np.einsum'的文档中理解的是,置换字符串将给出向量中轴的置换。 以下实验证实了这一点:
>>> M = np.arange(24).reshape(2,3,4)
>>> M.shape
(2, 3, 4)
>>> np.einsum('ijk', M).shape
(2, 3, 4)
>>> np.einsum('ikj', M).shape
(2, 4, 3)
>>> np.einsum('jik', M).shape
(3, 2, 4)
但这我无法理解:
>>> np.einsum('kij', M).shape
(3, 4, 2)
我希望(4,2,3)相反......我的理解有什么问题?
如果未指定输出签名(即下标字符串中没有'->'
,则einsum
将通过获取已给出的字母并按字母顺序排列它们来创建它。
这意味着
np.einsum('kij', M)
实际上相当于
np.einsum('kij->ijk', M)
因此,写'kij'
标记输入矩阵的轴,而不是输出矩阵,这会导致您观察到的轴的排列。
这一点在文档中没有明确说明,但可以在einsum
的C源代码中einsum
:
/*
* If there is no output signature, create one using each label
* that appeared once, in alphabetical order
*/
为了确保M
的轴按预期顺序进行置换,可能需要为输入和输出矩阵提供einsum
标记:
>>> np.einsum('ijk->kij', M).shape
(4, 2, 3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.