【问题标题】:How to load only few rows from a .npy file?如何从 .npy 文件中仅加载几行?
【发布时间】:2020-10-17 04:49:03
【问题描述】:

我有一个 11GB 的 X.npy 文件,我无法完全加载到内存中。

X.npy 的形状是(18873, 224, 224, 3)

现在我只想从中加载几行(比如 1024)(:1024, 224, 224, 3)。如果不在我的内存中加载 X.npy,我怎么能做到这一点?

我在np.load 中没有找到参数来实现这一点。有没有别的办法?

我想这可以使用np.memmap 来完成,但我坚持使用偏移参数。它的行为很奇怪。 X.npy 的 dtype 为“float32”。

【问题讨论】:

  • HDF5 是一种解决此问题的文件格式。看看h5py python 包。
  • 所以,我们有任何方法可以将 .npy 转换为 HDF5 格式,而无需将其加载到内存中,因为我只有 4GB 内存。
  • memmap 可以帮助转换文件

标签: python numpy file numpy-ndarray


【解决方案1】:

使用来自 np.load 的 mmap_mode 参数:

X = np.load('X.npy', mmap_mode='r')

这样,ndarray 将完全充当内存中的数组,但不会将其加载到 RAM 中。

【讨论】:

  • 但我只想加载几行。如果我使用memmap,然后执行newX = X_train[:256, :, :, :],那么我无法修改newX。
  • 然后使用 'w+' mmap 模式来改变磁盘上的内容,或者使用 'c' 在分配后对其进行操作,但保留磁盘上的数据。
  • 我想使用'c'模式,但是使用'c',它会将所有数据加载到我的内存中,从而导致我的电脑崩溃。所以,任何使用“c”的方式,但只加载几行数据(比如 256 行)。
  • 这不应该在“c”模式下发生。我建议您发布您的代码的最小示例,以便人们可以进一步分析它。
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 2013-04-20
  • 2011-09-11
  • 2021-11-04
  • 2018-04-13
  • 2016-10-16
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多