Numpy einsum广播

时间:2016-06-08 23:15:49

标签: python numpy numpy-einsum

有人可以解释一下numpy.einsum()函数中的广播(省略号)是如何工作的吗?

非常感谢一些示例,以说明如何以及何时使用它。

我查看了以下官方文档页面,但只有2个示例,我似乎无法理解如何解释它并使用它。

enter image description here

1 个答案:

答案 0 :(得分:6)

省略号是一个大概代表&#34的简写;所有剩余的轴未明确提及"。例如,假设您有一个形状数组(2,3,4,5,6,6):

import numpy as np
arr = np.random.random((2,3,4,5,6,6))

你希望沿着最后两个轴追踪:

result = np.einsum('ijklmm->ijklm', arr)
result.shape
# (2, 3, 4, 5, 6)

这样做的另一种方法是

result2 = np.einsum('...mm->...m', arr)
assert np.allclose(result, result2)

省略号提供简写符号(在这种情况下)"以及所有 轴向左和#34;。 ...代表ijkl

不必明确的一件好事是

np.einsum('...mm->...m', arr)

同样适用于任意数量维数> = 2的数组(只要最后两个具有相同的长度),而

np.einsum('ijklmm->ijklm', arr)

仅在arr具有6个维度时才有效。

当椭圆出现在中间时,它是"所有中轴的简写 未明确提及"。例如,下面是np.einsum('ijklmi->ijklm', arr) 相当于np.einsum('i...i->i...', arr)。这里...代表jklm

arr = np.random.random((6,2,3,4,5,6))
result = np.einsum('ijklmi->ijklm', arr)
result2 = np.einsum('i...i->i...', arr)
assert np.allclose(result, result2)
相关问题