numpy.einsum_path
numpy.einsum_path(subscripts, *operands, optimize='greedy')
Функция einsum_path() оценивает самый оптимальный порядок сокращений для правила суммирования Эйнштейна путем создания промежуточных массивов.
-
- subscripts - строка.
- Определяет индексы для суммирования.
- operands - последовательность массивов.
- Мыссивы для вычислений.
- optimize - {bool, list, tuple, ‘greedy’, ‘optimal’}.
- Указывает путь оптимизации алгоритма. tuple - предполагается, что вторым аргументом является созданный массив с максимальным размером; Если указан только один аргумент, то в качестве промежуточного максимального размера используется самый большой размер входного или выходного массива. list - указывает путь сокращения; False - вычисляет без оптимизации; True - использование "жадного" алгоритма; greedy - "жадный" алгоритм, который выбирает лучшее сокращение на каждом шаге; optimal - алгоритм, который комбинаторно исследует все возможные сокращения и выбирает наиболее оптимальный.
-
- результат - Список кортежей
- Список с оптимальной последовательностью сокрашщений в произведении Эйнштейна.
Примеры
>>> import numpy as np
>>>
>>> a = np.arange(18).reshape(3, 6)
>>> b = np.arange(36).reshape(6, 6)
>>> c = np.arange(24).reshape(6, 4)
>>>
>>> path_info = np.einsum_path('ji,ik,kl->il', a, b, c, optimize='greedy')
>>>
>>> print(path_info[0])
['einsum_path', (1, 2), (0, 1)]
>>>
>>> print(path_info[1])
Complete contraction: ji,ik,kl->il
Naive scaling: 4
Optimized scaling: 3
Naive FLOP count: 1.296e+03
Optimized FLOP count: 4.330e+02
Theoretical speedup: 2.993
Largest intermediate: 2.400e+01 elements
--------------------------------------------------------------------------
scaling current remaining
--------------------------------------------------------------------------
3 kl,ik->li ji,li->il
3 li,ji->il il->il