Spec-Zone.ru › NumPy 2.0

numpy.einsum_path

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

Оценивает порядок сокращения с наименьшей стоимостью для выражения einsum, учитывая создание промежуточных массивов.

Параметры:
subscriptsstr

Указывает индексы для суммирования.

*operandsсписок array_like

Это массивы для операции.

optimize{bool, list, tuple, ‘greedy’, ‘optimal’}

Выберите тип пути. Если задана кортеж, то второй аргумент предполагается максимальным размером созданного промежуточного массива. Если предоставлен только один аргумент, то максимальный размер промежуточного массива определяется по размеру наибольшего входного или выходного массива.

  • если передан список, начинающийся с einsum_path, используется этот путь сокращения
  • если False, оптимизация не производится
  • если True, используется алгоритм по умолчанию ‘greedy’
  • ‘optimal’ Алгоритм, который комбинированно исследует все возможные способы сокращения перечисленных тензоров и выбирает путь с наименьшей стоимостью. Масштабируется экспоненциально с количеством членов в сокращении.
  • ‘greedy’ Алгоритм, который выбирает наилучшее парами сокращение на каждом шаге. По сути, этот алгоритм ищет наибольшие внутренние, Хадамардовы и затем внешние произведения на каждом шаге. Масштабируется кубически с количеством членов в сокращении. Эквивалентен пути ‘optimal’ для большинства сокращений.

Значение по умолчанию — ‘greedy’.

Возвращаемое значение:
pathсписок кортежей

Список, представляющий путь einsum.

string_reprstr

Печатаемое представление пути einsum.

См. также

einsum, linalg.multi_dot

Примечания

Полученный путь указывает, какие члены входного сокращения следует сократить в первую очередь, результат этого сокращения затем добавляется в конец списка сокращения. Затем этот список можно итерировать до тех пор, пока не будут завершены все промежуточные сокращения.

Примеры

Мы можем начать с примера цепочки точечного произведения. В этом случае оптимально сократить тензоры b и c в первую очередь, как показано в первом элементе пути (1, 2). Результирующий тензор добавляется в конец списка сокращения, и затем завершается оставшееся сокращение (0, 1).

>>> np.random.seed(123)
>>> a = np.random.rand(2, 2)
>>> b = np.random.rand(2, 5)
>>> c = np.random.rand(5, 2)
>>> path_info = np.einsum_path('ij,jk,kl->il', a, b, c, optimize='greedy')
>>> print(path_info[0])
['einsum_path', (1, 2), (0, 1)]
>>> print(path_info[1])
  Complete contraction:  ij,jk,kl->il # may vary
         Naive scaling:  4
     Optimized scaling:  3
      Naive FLOP count:  1.600e+02
  Optimized FLOP count:  5.600e+01
   Theoretical speedup:  2.857
  Largest intermediate:  4.000e+00 elements
-------------------------------------------------------------------------
scaling                  current                                remaining
-------------------------------------------------------------------------
   3                   kl,jk->jl                                ij,jl->il
   3                   jl,ij->il                                   il->il

Пример более сложного преобразования индексов.

>>> I = np.random.rand(10, 10, 10, 10)
>>> C = np.random.rand(10, 10)
>>> path_info = np.einsum_path('ea,fb,abcd,gc,hd->efgh', C, C, I, C, C,
...                            optimize='greedy')
>>> print(path_info[0])
['einsum_path', (0, 2), (0, 3), (0, 2), (0, 1)]
>>> print(path_info[1]) 
  Complete contraction:  ea,fb,abcd,gc,hd->efgh # may vary
         Naive scaling:  8
     Optimized scaling:  5
      Naive FLOP count:  8.000e+08
  Optimized FLOP count:  8.000e+05
   Theoretical speedup:  1000.000
  Largest intermediate:  1.000e+04 elements
--------------------------------------------------------------------------
scaling                  current                                remaining
--------------------------------------------------------------------------
   5               abcd,ea->bcde                      fb,gc,hd,bcde->efgh
   5               bcde,fb->cdef                         gc,hd,cdef->efgh
   5               cdef,gc->defg                            hd,defg->efgh
   5               defg,hd->efgh                               efgh->efgh

© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.einsum_path.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API