【问题标题】:how to make matrix diagonal with larger shape如何使矩阵对角线具有更大的形状
【发布时间】:2020-03-23 10:48:12
【问题描述】:

我有形状为 777599 的一维数组。我想让我的数据一维数组的矩阵对角线为二维数组矩阵对角线。但我有一个问题。 这是我的代码:

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

【问题讨论】:

  • 具有这些尺寸的方形数组对于您的记忆来说太大了。为什么需要这个数组?对数组的大多数numpy 操作都涉及制作一个或多个相同大小的副本 - 无论是暂时的还是作为结果。

标签: python arrays numpy matrix diagonal


【解决方案1】:

包含 777599x777599(即 604660204801)个元素的数组是巨大的Sparse 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]))))

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

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2021-12-12
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多