Есть ли «улучшенный» метод с точечными точками?

проблема

Я хотел бы вычислить следующее, используя numpy или scipy:

Y = A**T * Q * A

гдеA этоm x n матрица,A**T это транспонированиеA а такжеQ являетсяm x m диагональная матрица.

посколькуQ является диагональной матрицей, я храню только ее диагональные элементы как вектор.

Пути решения дляY

В настоящее время я могу думать о двух способах расчетаY:

Y = np.dot(np.dot(A.T, np.diag(Q)), A) а такжеY = np.dot(A.T * Q, A).

Очевидно, что вариант 2 лучше, чем вариант 1, так как не нужно создавать реальную матрицу сdiag(Q) (если это то, что действительно делает NumPy ...)
Однако оба метода страдают от недостатка выделения большего объема памяти, чем на самом деле необходимо, посколькуA.T * Q а такжеnp.dot(A.T, np.diag(Q)) должны храниться вместе сA для того, чтобы рассчитатьY.

Вопрос

Есть ли в numpy / scipy метод, который устранял бы ненужное выделение дополнительной памяти, когда вы пропускали бы только две матрицыA а такжеB (в моем случаеB являетсяA.T) и весовой векторQ вместе с этим?

Ответы на вопрос(3)

Ваш ответ на вопрос