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 или число
- Произведение на основе указанных правил суммирования Эйнштейна.
Примеры
>>> 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]])