Spec-Zone.ru › NumPy 1.15

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
умножение 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) http://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.15.4/reference/generated/numpy.linalg.multi_dot.html

Spec-Zone.ru

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