Spec-Zone.ru › NumPy 1.16

numpy.linalg.multi_dot

numpy.linalg.multi_dot(arrays) [source]

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

multi_dot цепочкой numpy.dot и использует оптимальную скобочную запись для матриц [1] [2]. В зависимости от форм матриц это может значительно ускорить умножение.

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

Представьте себе multi_dot как:

def multi_dot(arrays): return functools.reduce(np.dot, arrays)
Параметры:
arrays : sequence of array_like

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

Возвращает:
output : ndarray

Возвращает скалярное произведение переданных массивов.

См. также

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

Примечания

Стоимость умножения матриц может быть вычислена с помощью следующей функции:

def cost(A, B):
    return A.shape[0] * A.shape[1] * B.shape[1]

Предположим, у нас есть три матрицы A_{10x100}, B_{100x5}, C_{5x50}.

Стоимость для двух различных скобочных записей следующая:

cost((AB)C) = 10*100*5 + 10*5*50   = 5000 + 2500   = 7500
cost(A(BC)) = 10*100*50 + 100*5*50 = 50000 + 25000 = 75000

Ссылки

[1] (1, 2) Кормен, «Введение в алгоритмы», Глава 15.2, стр. 370-378
[2] (1, 2) https://en.wikipedia.org/wiki/Matrix_chain_multiplication

Примеры

multi_dot позволяет вам написать:

>>> from numpy.linalg import multi_dot
>>> # Prepare some data
>>> A = np.random.random(10000, 100)
>>> B = np.random.random(100, 1000)
>>> C = np.random.random(1000, 5)
>>> D = np.random.random(5, 333)
>>> # the actual dot multiplication
>>> multi_dot([A, B, C, D])

вместо:

>>> np.dot(np.dot(np.dot(A, B), C), D)
>>> # or
>>> A.dot(B).dot(C).dot(D)

© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.16.1/reference/generated/numpy.linalg.multi_dot.html

Spec-Zone.ru

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