numpy.einsum_path

numpy.einsum_path(subscripts, *operands, optimize='greedy')

Функция numpy.einsum_path() оценивает самый оптимальный порядок сокращений для правила суммирования Эйнштейна путем создания промежуточных массивов.

Параметры:
subscripts - строка.
Определяет индексы для суммирования.
operands - последовательность массивов.
Мыссивы для вычислений.
optimize - {bool, list, tuple, ‘greedy’, ‘optimal’}.
Указывает путь оптимизации алгоритма. tuple - предполагается, что вторым аргументом является созданный массив с максимальным размером; Если указан только один аргумент, то в качестве промежуточного максимального размера используется самый большой размер входного или выходного массива. list - указывает путь сокращения; False - вычисляет без оптимизации; True - использование "жадного" алгоритма; greedy - "жадный" алгоритм, который выбирает лучшее сокращение на каждом шаге; optimal - алгоритм, который комбинаторно исследует все возможные сокращения и выбирает наиболее оптимальный.
Возвращает:
результат - Список кортежей
Список с оптимальной последовательностью сокрашщений в произведении Эйнштейна.
Смотрите так же:
einsum, tensordot

Примеры

>>> 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