【问题标题】:Python3.6 - saving big array to filePython3.6 - 将大数组保存到文件
【发布时间】:2017-10-18 12:30:47
【问题描述】:

我想将大数组保存到文件中。我用pickle.dump(array, file, pickle.HIGHEST_PROTOCOL)。它适用于小数组,但是当我尝试保存非常大的数组(例如 1GB 或更多)时,它会使用整个内存并且我的电脑会死机。

有什么办法可以保存这么大的数组吗?

数组示例:

[[array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)],
 [array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)],
 [array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32),array([1,2,3,298,299,300], dtype=float32)]]

【问题讨论】:

  • 也许可以将数组保存为二进制格式,即使需要付出更大的努力。你有array的例子吗(请小一点?)我不确定类型。
  • 假设您使用numpy:试试numpy.save,它会保存到.npy 文件中。
  • 请举例说明你的数组。
  • 不要使用pickle(存储数据):benfrederickson.com/dont-pickle-your-data使用Json, Csv, HDF5, ...

标签: python arrays python-3.x file pickle


【解决方案1】:

如果它是(或可以转换为)numpy 数组,那么numpy.save 效率更高

【讨论】:

    【解决方案2】:

    看一下HDF5格式和python实现h5py。

    http://docs.h5py.org/en/latest/quick.html

    这使得附加到文件成为可能。您可以遍历您的数据集。或者在集群中追加数据。

    import h5py
    
    # data
    n = int(1e6)
    arr = np.arange(n)
    
    # writing to hdf5
    f = h5py.File("mytestfile.hdf5", "w")
    dset = f.create_dataset("data_name", shape=(n,))
    dset[:n] = arr[:n]
    
    f.close()
    
    # reading from hdf5
    f = h5py.File("mytestfile.hdf5", "r")
    print(f["name"][:])
    
    # outputs
    # [      0.       1.       2. ...,  999997.  999998.  999999.]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2011-07-20
      • 2021-05-25
      相关资源
      最近更新 更多