Python

Освоение мощной функции einsum_path() NumPy

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

Одним из таких последствий будет einsum_path() функция, которая создает промежуточные массивы для оценки заказа на сокращение с наименьшей стоимостью для эйнсум выражение. Вместо того, чтобы ограничиваться выполнением сжатия для аналогичных измерений, эта функция способна сжимать любое заданное измерение с другим измерением. Самое приятное то, что можно использовать эту функцию для выполнения сжатия любого количества измерений, оставляя в стороне те, которые желательно оставить нетронутыми.


Синтаксис einsum_path() функция

Что еще можно использовать для лучшего понимания функции, кроме ее синтаксиса? Но интересующий здесь синтаксис может быть немного сложным для понимания. Итак, давайте посмотрим на это.

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

где

  • подписки – используется для указания индексов, которые должны быть суммированы
  • * операнды – используется для перечисления массивов, которые должны использоваться для операции
  • оптимизировать – по умолчанию установлено значение «жадный», оно используется для указания метода вывода желаемого типа пути. Другой тип пути, доступный для выбора, — «оптимальный».

Следует отметить, что «жадный» алгоритм анализирует каждый шаг и выбирает наиболее подходящую пару сокращений. С другой стороны, «оптимальный» алгоритм пробует все комбинации, тем самым идентифицируя все возможные пути сокращения входных данных и выбирая порядок с наименьшими затратами. einsum_path() в итоге функция возвращает путь в виде списка.


положить einsum_path() в использовании

Начать следует с импорта пустышка библиотека, позволяющая использовать einsum_path() функция.

Теперь давайте объявим входные массивы, для которых нужно определить путь сжатия.

ar1 = np.array([[10, -9], [5, -7]])
ar2 = np.array([[0, 4, 6], [7, 5, -3]])
ar3 = np.array([[-1, 4], [6, 8], [-2, 4]])

Пришло время развернуть einsum_path() функцию для этих массивов, используя приведенный ниже код.

pt = np.einsum_path('ij, jk, ki -> ii', ar1, ar2, ar3, optimize="greedy")

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

print(pt[0])
print(pt[1])
Результаты набора путей Einsum с жадным алгоритмом
Результаты einsum_path() устанавливается с помощью «Жадного» алгоритма

Но что, если кто-то хочет попробовать свои силы с другим алгоритмом оптимизации пути сокращения? Давайте сделаем это, установив для параметра оптимизации значение «оптимальный», как показано в коде ниже.

pt = np.einsum_path('ij, jk, ki -> ii', ar1, ar2, ar3, optimize="optimal")
print(pt[0])
print(pt[1])
Результаты набора путей Einsum с оптимальным алгоритмом
Результаты einsum_path() установить с помощью алгоритма «Оптимальный»

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


Заключение

Теперь, когда мы подошли к концу этой статьи, надеюсь, в ней подробно описаны различные методы использования einsum_path() функция в Python. Вот еще одна статья, в которой подробно описаны способы решения недопустимой синтаксической ошибки в Элиф функция Python. В AskPython есть множество других приятных и не менее информативных статей, которые могут быть очень полезны тем, кто хочет повысить свой уровень в Python. Лучшее лицо!


Ссылка


Ссылка на источник

Похожие статьи

Кнопка «Наверх»