Рассчитать след большой матрицы в Python - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть матрица X, и мне нужно написать функцию, которая вычисляет след матрицы enter image description here.

Я написал следующий сценарий:

import numpy as np
def test(matrix):
    return (np.dot(matrix, matrix.T)).trace()

np.random.seed(42)
matrix = np.random.uniform(size=(1000, 1))

print(test(matrix))

Он отлично работает на маленькой матрице, но когда я пытаюсь рассчитать на большой матрице (например, на матрице с формой (50000, 1)), это дает мне ошибку памяти.

Я пытался найти решение проблемы в других вопросах на сайте, но мне ничего не помогло. Буду благодарен за любой совет!

1 Ответ

0 голосов
/ 05 ноября 2018

Число, которое вы пытаетесь вычислить, является просто суммой квадратов всех записей X. Суммируйте квадраты вместо того, чтобы вычислять гигантский матричный продукт, полный записей, которые вам не нужны:

return (X**2).sum()

Или рассмотрите матрицу и используйте dot, что, вероятно, быстрее для смежных X:

raveled = X.ravel()
return raveled.dot(raveled)

На самом деле, ravel, вероятно, быстрее для несмежных X, также - даже когда ravel нужно копировать, он не делает больше выделения, чем (X**2).sum().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...