在npy

时间:2018-01-10 06:48:08

标签: numpy

我有一些功能的结果为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"上尝试多种算法。

1 个答案:

答案 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))