首页 文章

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

提问于
浏览
0

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

3 回答

  • 2

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

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

    SVM Module Scipy

    Sparse matrices Scipy

    如果您还有其他问题,那么您可以获得有关SVM和稀疏矩阵的一些信息 .

    编辑提供答案和解决方案

  • 2

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

  • 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方法,因为Numpy可能无法正确解释它们 .

相关问题