省略号是粗略表示“所有未明确提及的剩余轴”的简写。例如,假设您有一个形状数组 (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)
省略号提供了一个简写符号,意思是(在这种情况下)“和所有
轴向左”。... 代表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)