当前位置: 首页 > 面试题库 >

numpy数组最快的保存和加载选项

宰父智敏
2023-03-14
问题内容

我有一个脚本,生成numpy array带有dtype=float和形状为的二维s (1e3, 1e6)。现在,我正在使用阵列np.savenp.load执行IO操作。但是,这些功能对于每个阵列都需要花费几秒钟。是否有更快的方法来保存和加载整个数组(即,无需假设其内容并减少它们)?我愿意array在保存之前将s转换为另一种类型,只要准确保留数据即可。


问题答案:

对于真正的大型阵列,我听说过几种解决方案,它们大多是对I / O懒惰:

  • NumPy.memmap,将大数组映射为二进制形式
    • 优点:
    • 除Numpy外没有其他依赖项
    • 透明替换ndarray(任何接受ndarray的类都接受memmap
    • 缺点:
    • 您的阵列块限制为2.5G
    • 仍然受Numpy吞吐量限制
  • 将Python绑定用于HDF5(一种支持大数据的文件格式,如PyTables或h5py)

    • 优点:
    • 格式支持压缩,索引和其他超好功能
    • 显然,最终的PetaByte大文件格式
    • 缺点:
    • 学习曲线的层次结构?
    • 必须定义您的性能需求(请参阅下文)
    • Python的酸洗系统(出于种族,而不是为了速度而提及)

    • 优点:

    • 这是Pythonic!(哈哈)
    • 支持各种物体
    • 缺点:
    • 可能比其他对象慢(因为针对任何对象而不是数组)

从NumPy.memmap的文档中:

创建到存储在磁盘上的二进制文件中的数组的内存映射。

内存映射文件用于访问磁盘上大文件的小片段,而无需将整个文件读入内存

memmap对象可以在接受ndarray的任何地方使用。给定任何memmap fpisinstance(fp, numpy.ndarray)
返回True。

HDF5阵列

从h5py文档

使您可以存储大量的数值数据,并轻松地从NumPy处理该数据。例如,您可以将磁盘上存储的多TB数据集切片,就像它们是真实的NumPy数组一样。数千个数据集可以存储在一个文件中,可以根据需要进行分类和标记。

该格式支持以各种方式压缩数据(为同一I / O读取加载更多位),但这意味着数据变得不那么容易单独查询,但在您的情况下(纯加载/转储数组),它可能会有效



 类似资料:
  • 问题内容: 是否可以保存一个numpy数组,将其附加到已经存在的npy文件中—类似于? 我有几个函数必须遍历大型数组的行。由于内存限制,我无法立即创建数组。为了避免一遍又一遍地创建行,我想创建每行一次并将其保存到文件中,然后将其追加到文件的上一行中。稍后,我可以在mmap_mode中加载npy文件,并在需要时访问切片。 问题答案: 内置文件格式非常适合处理小型数据集,而无需依赖外部模块。 但是,当

  • 问题内容: 我在AI项目上使用Redis。 这个想法是让多个环境模拟器在许多cpu内核上运行策略。模拟器将体验(状态/操作/奖励元组列表)写入Redis服务器(重播缓冲区)。然后,培训过程将经验作为数据集读取以生成新策略。将新策略部署到模拟器,删除先前运行的数据,然后继续该过程。 大部分经验都记录在“状态”中。通常将其表示为尺寸为80 x 80的大型numpy数组。模拟器会以cpu允许的最快速度生

  • 你知道什么是最烦恼的吗?如果你创建了一大个待完成的checklist,稍后回来的时候再用的时候,发现没有了。嗯,这就是应用当前的状态,所以我们将要给用户提供一个保存用户数据的途径。 我们已经为他做了一些架构准备,我们订阅了我们的Observable在每次数据变更的时候都调用了save函数,我们只需要现在来实现这个函数就可以了。 > 修改 src/pages/home/home.ts 里面的 sav

  • 问题内容: 要求: 我需要从数据中任意增加一个数组。 我可以猜测大小(大约100-200),但不能保证每次都适合该数组 一旦增长到最终大小,我就需要对其进行数值计算,因此我更希望最终使用二维numpy数组。 速度至关重要。例如,对于300个文件之一,update()方法被称为4500万次(大约需要150秒),而finalize()方法被称为500k次(总共需要106s)……总共需要250s或者。

  • 问题内容: 我有以下代码供用户单击按钮使用,当他们单击按钮时,正在查看的特定字符串将被收藏并存储在其他位置。 我有两个问题。 我现在所拥有的是什么问题?因为当您单击按钮时它会崩溃。 您将如何完成将要加载的字符串并将其保存到数组的load array方法,以便用户以后可以看到该数组? 谢谢你的时间!! 原木猫 问题答案: 函数返回。您可能想要像这样使用它: 该数组可以稍后在第二部分中使用。希望这可以

  • 译者 bruce1408 作者: Matthew Inkawhich 本文提供有关Pytorch模型保存和加载的各种用例的解决方案。您可以随意阅读整个文档,或者只是跳转到所需用例的代码部分。 当保存和加载模型时,有三个核心功能需要熟悉: torch.save: 将序列化对象保存到磁盘。 此函数使用 Python 的pickle模块进行序列化。使用此函数可以保存如模型、tensor、字典等各种对象。