как сделать диагональ матрицы с большей формой - PullRequest
0 голосов
/ 23 марта 2020

У меня есть 1D массив с формой 777599. Я хочу сделать диагональ матрицы для моих данных. 1D массив будет диагональю матрицы 2D массива. но у меня есть проблема. это мой код:

import numpy as np
a = np.linspace(0, 2000, 777599)
b = np.diag(a)
print(b.shape)

и ответ:

Traceback (most recent call last):
  File "/home/willi/PycharmProjects/006_TA/017_gravkorCG5.py", line 29, in <module>
    b = np.diag(a)
  File "<__array_function__ internals>", line 6, in diag
  File "/home/willi/PycharmProjects/venv/lib/python3.5/site-packages/numpy/lib/twodim_base.py", line 275, in diag
    res = zeros((n, n), v.dtype)
MemoryError: Unable to allocate 4.40 TiB for an array with shape (777599, 777599) and data type float64

1 Ответ

1 голос
/ 23 марта 2020

Массив с 777599x777599 (т.е. 604660204801) элементами равен огромный . Разреженные матрицы на помощь (требуется pip install scipy):

import numpy as np
from scipy import sparse
a = np.linspace(0, 2000, 777599)
b = sparse.csc_matrix((a, (range(a.shape[0]), range(a.shape[0]))))

Это будет медленнее, чем плотная матрица ... если плотная матрица могла бы поместиться в память. :)

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