У меня есть большой набор матриц 3 x 3 (скажем, n
) и соответствующие векторы 3 x 1 и хотели бы умножить каждый вектор на соответствующую ему матрицу. Если укладываю матрицы в n
х 3 х 3 ndarray
называется R
и векторы в 3 х n
ndarray
называется v
, я могу получить пачку размноженных векторов через,Изготовление срезов точечного вывода без промежуточных продуктов
import numpy as np
intermediate = np.dot(R, v)
out = np.diagonal(intermediate, axis1=0, axis2=2)
Но это очень неэффективно: np.dot
производит массив n
x 3 x n
intermediate
, из которого я вручную выбираю 3 x n
фрагмент. Могу ли я каким-то образом создать массив 3 x n
, не сделав промежуточным n
x 3 x n
массив?
Посмотрите на 'np.einsum'. – hpaulj
@MattDMo, это не позволяет генерировать промежуточный массив. Он просто избегает присвоения ему имени. Но он по-прежнему занимает память и требует вычисления. –
Я все еще немного новичок в новинке - как я уже сказал, дикое предположение :) – MattDMo