numpy.linalg.multi_dot
-
numpy.linalg.multi_dot(arrays)[source] -
Вычисляет скалярное произведение двух или более массивов в одном вызове функции, автоматически выбирая наиболее быстрый порядок вычисления.
multi_dotцепочкойnumpy.dotи использует оптимальную скобочную нотацию матриц [R46] [R47]. В зависимости от размеров матриц это может значительно ускорить умножение.Если первый аргумент является одномерным, он обрабатывается как строчная матрица. Если последний аргумент является одномерным, он обрабатывается как столбцевая матрица. Остальные аргументы должны быть двумерными.
Представьте
multi_dotкак:def multi_dot(arrays): return functools.reduce(np.dot, arrays)
Параметры: arrays : последовательность array_like
Если первый аргумент является одномерным, он обрабатывается как строчная матрица. Если последний аргумент является одномерным, он обрабатывается как столбцевая матрица. Остальные аргументы должны быть двумерными.
Возвращает: output : ndarray
Возвращает скалярное произведение заданных массивов.
См. также
-
dot - умножение матриц с двумя аргументами.
Примечания
Стоимость умножения матриц может быть вычислена с помощью следующей функции:
def cost(A, B): return A.shape[0] * A.shape[1] * B.shape[1]Предположим, у нас есть три матрицы
.
Стоимость для двух различных скобочных нотаций приведена ниже:
cost((AB)C) = 10*100*5 + 10*5*50 = 5000 + 2500 = 7500 cost(A(BC)) = 10*100*50 + 100*5*50 = 50000 + 25000 = 75000
Ссылки
[R46] (1, 2) Кормен, «Введение в алгоритмы», глава 15.2, стр. 370-378 [R47] (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.14.5/reference/generated/numpy.linalg.multi_dot.html