如何使矩阵对角线具有更大的形状

问题描述 投票:0回答:1

我的一维数组的形状是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
python arrays numpy matrix diagonal
1个回答
1
投票

具有777599x777599(即604660204801)元素的数组为hugeSparse matrices进行救援(需要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]))))

如果密集矩阵可以放入内存,它将比密集矩阵慢。 :)

© www.soinside.com 2019 - 2024. All rights reserved.