Spec-Zone.ru › NumPy 1.17

numpy.einsum_path

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

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

Параметры:
subscripts : str

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

*operands : list of array_like

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

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

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

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

По умолчанию — ‘greedy’.

Возвращает:
path : list of tuples

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

string_repr : str

Печатное представление пути 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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.einsum_path.html

Spec-Zone.ru

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