타원은 대략 "명시 적으로 언급되지 않은 나머지 모든 축"에 대한 서 속기이다. 예를 들어, 형태의 배열 (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
을 의미합니다. 명시하지 않아도에 대한
이
하나 좋은 점은 그 크기> = 2 (너무 오래 지난 두 동일한 길이를 가지고), 반면
임의의 수의
np.einsum('...mm->...m', arr)
작품 똑같이와 배열
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)
는 유닛 테스트 파일에 더 많은 예제가 있습니다, https://github.com/numpy/numpy/blob/master/numpy/core/tests/test_einsum.py – hpaulj