我会有很多Numpy https://docs.scipy.org/doc/numpy-1.14.0/reference/ arrays https://docs.scipy.org/doc/numpy-1.14.0/reference/arrays.html存储在npz https://docs.scipy.org/doc/numpy/neps/npy-format.html文件,正在使用保存保存压缩 https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.savez_compressed.html功能。
我将信息拆分到许多数组中,因为如果不这样做,我使用的函数会因内存问题而崩溃。数据并不稀疏。
我需要将所有这些信息合并到一个唯一的数组中(以便能够使用一些例程处理它),并将其存储到磁盘中(以便使用不同的参数多次处理它)。
数组不适合 RAM+交换内存。
如何将它们合并成一个唯一的数组并将其保存到磁盘上?
我怀疑我应该使用mmap_模式 https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.load.html,但我不知道具体是如何实现的。另外,我想如果我一开始不保留连续的磁盘空间,可能会出现一些性能问题。
我读过了this https://stackoverflow.com/a/30448186/1420303发布,但我仍然不知道该怎么做。
EDIT
澄清:我制作了许多函数来处理类似的数据,其中一些需要数组作为参数。在某些情况下,我可以通过使用切片仅传递这个大数组的一部分。但掌握所有信息仍然很重要。在这样的一个数组中。
这是因为: 数组包含按时间排序的信息(来自物理模拟)。在函数的参数中,用户可以设置初始处理时间和最后处理时间。此外,他/她可以设置处理块的大小(这很重要,因为这会影响性能,但允许的块大小取决于计算资源)。因此,我无法将数据存储为单独的块。
这个特定数组(我正在尝试创建的数组)的构建方式在其工作时并不重要。
您应该能够在np.memap
array:
import numpy as np
data_files = ['file1.npz', 'file2.npz2', ...]
# If you do not know the final size beforehand you need to
# go through the chunks once first to check their sizes
rows = 0
cols = None
dtype = None
for data_file in data_files:
with np.load(data_file) as data:
chunk = data['array']
rows += chunk.shape[0]
cols = chunk.shape[1]
dtype = chunk.dtype
# Once the size is know create memmap and write chunks
merged = np.memmap('merged.buffer', dtype=dtype, mode='w+', shape=(rows, cols))
idx = 0
for data_file in data_files:
with np.load(data_file) as data:
chunk = data['array']
merged[idx:idx + len(chunk)] = chunk
idx += len(chunk)
然而,正如评论中指出的那样,在不是最快的维度上工作会非常慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)