我有一些功能的结果为8 * 1024的numpy。我需要在npy中将大量此类结果保存为一个矩阵。我能做的一种方法是:
result []
for input in range(inputs):
arr = computer (input) # arr = 8*1024
result.append(arr)
# After loop completes, save results
np.save('result.npy', result)
如果我将所有结果附加到"结果",它在RAM上,因此RAM在使用中达到100%。我需要保存' arr'在计算中的npy中。 稍后,为了进行进一步处理,我按下面给出的加载npy,这里我需要以随机模式加载结果:
result_load = np.load ('result.npy, mmap_mode='r)
x = results[i] # i is some arbitrary random index
final_result = algo_n(x)
在这里,由于直接从磁盘访问,我不需要太多RAM,但是,在第一部分中,我无法找到任何方法来保存所有阵列而不使用太多RAM。
注意:我必须单独进行两种处理,因为我必须在" x"上尝试多种算法。
答案 0 :(得分:1)
您可以使用numpy.memmap
预先创建内存映射文件,并将数组写入memmap的片中 - 类似于您已用于加载文件部分的方法:
import numpy as np
def computer(i):
return np.ones((8, 1024)) * i
inputs = 2
result = np.memmap('result.bin', mode='w+', shape=(inputs, 8, 1024))
for i in range(inputs):
arr = computer (i) # arr = 8*1024
result[i] = arr
del result # close the file
请注意,'result.bin'
是np.load
无法打开的原始二进制文件。您需要使用np.memmap
进行加载(您需要指定数组的形状):
result_load = np.memmap('result.bin', mode='r', shape=(inputs, 8, 1024))