【问题标题】:Numpy Matrix Memory size low compared to Numpy Array与 Numpy Array 相比,Numpy 矩阵内存大小低
【发布时间】:2018-10-19 17:39:18
【问题描述】:

我有一个 .npz 文件,我想将它加载到 RAM 中。压缩文件大小为 30MB。我正在执行以下操作将数据加载到 RAM 中。

import numpy as np
from scipy import sparse
from sys import getsizeof

a = sparse.load_npz('compressed/CRS.npz').todense()
getsizeof(a)
# 136
type(a)
# numpy.matrixlib.defmatrix.matrix
b = np.array(a)
getsizeof(b)
# 64000112
type(b)
# numpy.ndarray

numpy.arrray相比,为什么numpy.matrix对象占用的内存非常小? a 和 b 具有相同的维度和数据。

【问题讨论】:

  • 如果您使用.toarray(),您将获得完整尺寸。 .todense 在其上添加 asmatrix 层,创建视图。那是一个实现细节。一般来说getsizeof 不是一个可靠的衡量标准。它有点适用于数组,但对列表毫无价值。

标签: python numpy memory


【解决方案1】:

您的a 矩阵是另一个数组的视图,因此基础数据不计入其getsizeof。您可以通过检查 a.base is not None 或者通过查看 a.flags 中的 OWNDATA 标志是 False 来看到这一点。

您的b 数组不是视图,因此基础数据计入其getsizeof

numpy.matrix 不提供任何内存节省。

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多