numpy.einsum

numpy.einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe', optimize=False)

Функция einsum() применяет правила суммирования Эйнштейна к указанным массивам.

Параметры:
subscripts - строка.
Определяет индексы для суммирования.
operands - последовательность массивов.
Мыссивы для вычислений.
out - {массив NumPy, None}, необязательный параметр.
Массив в который можно поместить результат функции. Данный массив должен соответствовать форме и типу данных результирующего массива функции, а так же обязательно быть C-смежным, т.е. хранить данные в строчном С стиле. Указание данного параметра, позволяет избежать лишней операции присваивания тем самым немного ускоряя работу вашего кода. Полезный параметр если вы очень часто обращаетесь к функции в цикле.
dtype - тип данных NumPy, необязательный параметр.
Определяет тип данных выходного массива.
order - K', 'A', 'C' или 'F', необязательный параметр.
Этот параметр определяет в каком порядке массивы должны храниться в памяти: строчном C-стиле или столбчатом стиле Fortran. Если object не является массивом NumPy, то созданный массив будет находиться в памяти в строковом С порядке, если указать флаг 'F', то будет храниться в столбчатом порядке 'Fortran'. Если object - это массив NumPy, то флаг 'K' либо сохраняет порядок исходного массива либо устанавливает самый близкий по структуре; флаг 'A' установит макет памяти выходного массива в 'F' если массив object является смежным со столбчатым стилем Fortran, в противном случае макет памяти будет установлен в 'C'. По умолчанию флаг установлен в значение 'K'.
casting - {‘no’, ‘equiv’, ‘safe’, ‘same_kind’, ‘unsafe’}, необязательный параметр.
Позволяет настроить преобразование типов данных при вычислениях. Данный параметр может принимать следующие значения: 'no' - типы данных не преобразуются; 'equiv' - допускается только изменение порядка байтов; 'safe' - допускаются только те типы данных, которые сохраняют значения; 'same_kind' - допускаются только безопасные преобразования, такие как float64 в float32; 'usafe' - допускаются любые преобразования данных.
optimize - {False, True, ‘greedy’, ‘optimal’}, необязательный параметр.
Управляет оптимизацией алгоритма. False - вычисляет без оптимизации; True - использование "жадного" алгоритма; greedy - "жадный" алгоритм, который выбирает лучшее сокращение на каждом шаге; optimal - алгоритм, который комбинаторно исследует все возможные сокращения и выбирает наиболее оптимальный.
Возвращает:
результат - массив NumPy или число
Произведение на основе указанных правил суммирования Эйнштейна.
Смотрите так же:
einsum_path, tensordot, matmul, linalg.multi_dot, dot, outer


Примеры

>>> import numpy as np
>>>
>>> a = np.arange(16).reshape(4, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> 
>>> np.einsum('ii', a)
30
>>> np.trace(a)
30
>>> 
>>> 
>>> np.einsum('ii->i', a)
array([ 0,  5, 10, 15])
>>> np.diag(a)
array([ 0,  5, 10, 15])
>>> 
>>> 
>>> b = [2, 4, 6, 8]
>>> 
>>> np.einsum('ij,j', a, b)
array([ 40, 120, 200, 280])
>>> np.dot(a, b)
array([ 40, 120, 200, 280])
>>> 
>>> 
>>> np.einsum('ji', a)
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])
>>> 
>>> a.T
array([[ 0,  4,  8, 12],
       [ 1,  5,  9, 13],
       [ 2,  6, 10, 14],
       [ 3,  7, 11, 15]])