numpy数组中的np.nan是否占用内存?

时间:2017-06-19 07:16:54

标签: python pandas numpy

我有一个巨大的csv文件,无法加载到内存中。将其转换为libsvm格式可能会节省一些内存。 csv文件中有很多nan。如果我读取行并将它们存储为np.array,并将np.nan设置为NULL,那么数组是否仍会占用太多内存? 数组中的np.nan是否也占用内存?

3 个答案:

答案 0 :(得分:2)

据我所知,nan和zero值占用与任何其他值相同的内存,但是,您可以通过其他方式解决您的问题:

您是否尝试过使用稀疏矢量?它们适用于具有大量0值的向量,并且优化了内存消耗

SVM Module Scipy

Sparse matrices Scipy

如果您还有其他问题,请提供有关SVM和稀疏矩阵的信息。

编辑提供答案和解决方案

答案 1 :(得分:2)

使用floating point数字表示时,非数字值(NaNinf)也由占用与任何数字浮动相同位数的特定二进制模式表示点值。因此,NaN占用与数组中任何其他数字相同的内存量。

答案 2 :(得分:1)

根据sys模块中的getsizeof()命令,它确实如此。一个简单而快速的例子:

import sys
import numpy as np 

x = np.array([1,2,3])
y = np.array([1,np.nan,3])

x_size = sys.getsizeof(x)
y_size = sys.getsizeof(y)
print(x_size)
print(y_size)
print(y_size == x_size) 

这应该打印出来

 120
 120 
 True 

所以我的结论是它使用的内存与普通条目一样多。

相反,您可以使用稀疏矩阵(Scipy.sparse),它们根本不保存零/ Null,因此内存效率更高。但Scipy强烈反对直接使用Numpy方法https://docs.scipy.org/doc/scipy/reference/sparse.html,因为Numpy可能无法正确解释它们。