【问题标题】:Loading .npy file that are too large for RAM加载对于 RAM 来说太大的 .npy 文件
【发布时间】:2021-08-12 17:32:38
【问题描述】:

我正在尝试将一个大的 .npy 文件 (~800 MB) 加载到 Google Collab 中,但每次我尝试这样做时,Collab 实例都会由于 RAM 过度使用而崩溃。

     import numpy as np
     a=np.load('oddata.npy',allow_pickle=True)

我正在使用具有 12 GB RAM 的基本 Collab 实例。

我曾尝试使用 mmap,但它返回此错误:ValueError: Array can't be memory-mapped: Python objects in dtype.

问题是否存在,例如将 .npy 文件分成块或将其转换为另一种文件格式。

最好的,

阿拉夫

【问题讨论】:

  • HDF5 支持分块读取文件。您可以尝试将文件转换为 HDF5,但您至少需要能够在进行转换的机器上打开它。例如,您可以在交换内存非常大的机器上执行此操作。但是请注意,HDF5 不会接受纯 Python 对象,我认为这是您的主要问题。为什么不使用原生类型?
  • 非常感谢您的快速响应。问题是这是一个预制数据集,所以我真的没有机会创建任何原生类型。

标签: python dataframe numpy google-colaboratory ram


【解决方案1】:

我认为您的问题不仅仅是内存不足。 Collab 实例中分配的 12 GB 应该足以读取 800MB 的文件。为了确认,我在我的 Raspberry Pi(只有 4GB RAM)上运行了一个简单的测试。它可以创建一个 1GB 的 .npy 文件并将其读回新数组。代码如下:

import numpy as np
nimg, n0, n1 = 1000, 512, 512
arr = np.arange(nimg*n0*n1).reshape(nimg,n0,n1)
print(arr.dtype, arr.shape)

np.save('SO_67671598.npy',arr)
arr2 = np.load('SO_67671598.npy')    
print(arr2.dtype, arr2.shape)

无论有没有allow_pickle=True 参数,我都会得到相同的结果。请注意,不推荐使用allow_pickle=True(出于安全原因)。在加载对象数组时是必需的。我建议你在你的 Collab 实例中运行这个测试,看看你会得到什么。

【讨论】:

  • 先生,我尝试了您建议的测试,并且能够在我的 Collab 实例上运行它而没有任何问题。此时我怀疑我的数据文件很可能已损坏。我将尝试从文件加载脚本重新创建 .npy 文件。非常感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
  • 2015-02-19
相关资源
最近更新 更多