【问题标题】:Extracting specific values from .npy file从 .npy 文件中提取特定值
【发布时间】:2014-03-10 21:50:28
【问题描述】:

我有一个 .npy 文件,我基本上知道其中的所有内容(大小、元素数量、元素类型等),我希望有一种方法可以在不加载数组的情况下检索特定值。目标是使用尽可能少的内存。

我正在寻找类似的东西

def extract('test.npy',i,j):
    return "test.npy[i,j]"

我有点知道如何使用文本文件(请参阅最近的问题),但使用 npy 数组执行此操作可以让我做的不仅仅是行提取。

此外,如果您知道使用 scipy 稀疏矩阵执行此操作的任何方法,那将非常棒。

谢谢。

【问题讨论】:

  • 简而言之,以.npy 格式存储数据的方式会使这变得困难。我建议改用 HDF5,它允许您读取或修改任意数组或数组切片 - 查看 h5pyPyTables
  • @ali_m - 这根本不是真的。 .npy 文件被设计为内存映射。 HDF5 在这方面当然更有效,因为它对文件进行了分块(磁盘上长搜索的变化较小),但对 memmaping .npy 文件的支持是内置于 numpy 的。只需使用np.load(filename, mmap_mode='r')。不过,总的来说,我当然同意 HDF5 从长远来看是更好的选择。
  • @JoeKington 我的立场是正确的!

标签: python arrays numpy loading extract


【解决方案1】:

只需使用data = np.load(filename, mmap_mode='r')(或其他模式之一,如果您还需要更改特定元素)。

这将返回一个内存映射数组。数组的内容不会加载到内存中,而是在磁盘上,但是您可以像往常一样通过索引数组来访问各个项目。 (请注意,访问某些切片将比访问其他切片花费更长的时间,具体取决于数组的形状和顺序。)

HDF 是一种更有效的格式,但 .npy 格式旨在允许内存映射数组。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 2019-10-15
    • 2011-06-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多