有人可以解释一下numpy.einsum()函数中的广播(省略号)是如何工作的吗?
非常感谢一些示例,以说明如何以及何时使用它。
我查看了以下官方文档页面,但只有2个示例,我似乎无法理解如何解释它并使用它。
答案 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)