【发布时间】:2018-06-08 23:34:36
【问题描述】:
我将有许多Numpy arrays 存储在npz 文件中,这些文件正在使用savez_compressed 函数保存。
我将信息拆分为多个数组,因为如果不是,我正在使用的函数由于内存问题而崩溃。数据不是稀疏的。
我需要将所有这些信息合并到一个唯一的数组中(以便能够使用一些例程处理它),并将其存储到磁盘中(使用不同的参数多次处理它)。
阵列不适合 RAM+交换内存。
如何将它们合并成一个唯一的数组并保存到磁盘?
我怀疑我应该使用mmap_mode,但我不知道具体如何。另外,我想如果我一开始不保留连续的磁盘空间,可能会出现一些性能问题。
我已经阅读了this 的帖子,但我仍然不知道该怎么做。
编辑
澄清:我已经制作了许多函数来处理类似的数据,其中一些需要一个数组作为参数。在某些情况下,我可以通过使用切片将它们仅传递给这个大数组的一部分。但掌握所有信息仍然很重要。在这样的数组中。
这是因为:数组包含时间排序的信息(来自物理模拟)。在函数的参数中,用户可以设置初始处理时间和最后处理时间。此外,他/她可以设置处理块的大小(这很重要,因为这会影响性能,但允许的块大小取决于计算资源)。因此,我无法将数据存储为单独的块。
这个特定数组(我正在尝试创建的数组)的构建方式在它工作时并不重要。
【问题讨论】:
-
你不能映射压缩数组。如果您尝试,我认为当前的
np.load实现只是忽略了mmap_mode。 -
感谢您提供的信息。
-
必须将它们合并到一个数组中,还是只能逐块加载、逐块处理、逐块写出?
-
@user1420303:我明白了。您仍然可以通过查看时间范围、找到相应的块并加载这些块并在必要时对第一个和最后一个块进行切片来使用分块数据。这有点逻辑,但它可以防止您耗尽内存。您甚至可以将其抽象为某种流集合类,允许透明的数组索引和隐藏该逻辑。
-
@user1420303:我不知道这个功能。这似乎很合理,是的。但是,我不完全确定它是如何完成的。