有一个张量保存在.npy
我这样读的文件中:
x = np.load('x.npy')
任务是用它执行数学转换并将其保存到另一个文件中。
x = process(x)
np.save('x_processed.npy', x)
初始张量放在 RAM 中,process
函数的返回值不是。
可以部分转换数据:将函数process
应用于张量的切片x
,但格式.npy
不支持追加。
我试着这样申请numpy.memmap
:
x = np.load('x.npy', mmap_mode='r+')
预期行为 - 张量不会加载到 RAM 中,而是会创建文件到 RAM 的映射。如果您稍后在 tensor 中编辑数据x
,那么它们将在文件中进行编辑。
但是该函数的process
构建方式是它返回新创建的张量,因此它在 RAM 中创建并完全吃掉它。
不过,有一些方法可以处理部分(切片)中的原始张量吗?
假设有两个通过函数处理切片获得的文件process
,然后加载mmap
:
x1 = np.load('x1.npy', mmap_mode='r')
x2 = np.load('x2.npy', mmap_mode='r')
以及要写入结果的文件:
x_targ = np.memmap(filename, dtype='float32', mode='w+', shape=full_tensor_shape)
那么是否可以这样做:
x_targ[0:x1.shape[0], :, :, :] = x1
x_targ[0:x2.shape[0], :, :, :] = x2
或者如何将它们合并到一个文件中?
由于输出张量的大小是已知的,因此可以一次创建包含新张量的整个目标文件并将其作为内存映射打开。然后分段读取源文件,处理它并将结果写入目标。