【问题标题】:Saving numpy array such that it is readily available without loading保存 numpy 数组,使其无需加载即可轻松使用
【发布时间】:2016-03-29 17:50:44
【问题描述】:

我有一个 20GB 的图像库,存储为一个高维 numpy 数组。这个库允许我使用这些图像,而不必每次都重新生成它们。现在我的问题是 np.load("mylibrary") 花费的时间与生成几个图像所需的时间一样多。因此我的问题是:有没有办法存储一个 numpy 数组,以便无需加载即可轻松访问它?

编辑:我正在使用 PyCharm

【问题讨论】:

  • 根据您要执行的操作,您可能会降低图像质量或在经过有损图像压缩后存储图像?否则,据我所知,硬盘上的 IO 将成为读取阵列序列化版本的限制因素。您是否还需要一次存储内存中的所有图像?将序列化的单个图像作为 blob 存储在数据库中可能有效吗?
  • 第一个问题:你有多少内存可用?因为如果它不重要,那么您将不得不在某个时候进行磁盘 I/O,这几乎会扼杀您正在寻找的任何速度。
  • 感谢您的回复。我正在使用配备 4 GB RAM 1600 MHz DDR3 的 MacBook Air。我可以在打开 PyCharm 时加载一次。我的问题是了解如何在函数中重复使用它(在加载后,如有必要)。
  • 除了将所有图像保存为一个数组之外,您还可以将它们单独保存或使用savez 分组保存。这是一个延迟加载。还请查看load 的 memmap 模式。

标签: python database numpy save


【解决方案1】:

我建议h5py,它是 HDF5 二进制数据格式的 Pythonic 接口。

它可以让您存储大量数字数据,并轻松地从 NumPy 操作这些数据。例如,您可以分割成存储在磁盘上的数 TB 数据集,就好像它们是真正的 NumPy 数组一样。数以千计的数据集可以存储在一个文件中,根据需要进行分类和标记。

您也可以使用PyTables'。它是 python 和 numpy 的另一个 HDF5 接口

PyTables 是一个用于管理分层数据集的软件包,旨在高效轻松地处理大量数据。您可以下载 PyTables 并免费使用它。您可以在此处访问文档、一些使用示例和演示文稿。

numpy.memap 是另一种选择。但是它会比 hdf5 慢。另一个条件是一个数组应该限制在2.5G

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多