Представьте, что у вас 2 массива numpy:
> A, A.shape = (n,p)
> B, B.shape = (p,p)
Обычно p является меньшим числом (p <= 200), тогда как n может быть сколь угодно большим.
Я делаю следующее:
result = np.diag(A.dot(B).dot(A.T))
Как вы можете видеть, я сохраняю только n диагональных записей, но есть промежуточный (n x n) массив, рассчитанный, из которого сохраняются только диагональные записи.
Мне нужна функция типа diag_dot(), которая вычисляет только диагональные записи результата и не выделяет полную память.
Результат:
> result = diag_dot(A.dot(B), A.T)
Есть ли готовые функции, подобные этому, и это можно сделать эффективно без необходимости выделения промежуточного (n x n) массива?