创建并保存一个非常大的数字列表

时间:2012-09-25 08:44:55

标签: matlab io numbers

如何创建以下列表并将其保存到文件而不会耗尽内存?

 li = 1:2^40;

我知道创建列表并将其写入文件块的明显解决方案。我想知道是否有更优雅的方式。

1 个答案:

答案 0 :(得分:2)

由于该列表需要8.8 TB的内存,因此这里有一个简单的解决方案可以防止这种情况需要:

loop_limit = uint64(2^40);
ii = uint64(1);
chunksize = 1000;

fid = fopen('output.txt', 'w');
while ii < loop_limit

    for jj = 1:chunksize        
        fprintf(fid, '%d\n', ii);
        ii=ii+1;
        if ii >= loop_limit
            break; end    
    end

end

fclose(fid);

在任何地方都没有创建过任何列表;内存开销仅限于使用的少数变量。

请注意,您提供的列表(1:2^40)将超过Matlab的最大循环索引2147483647,这是双循环的原因。

另请注意,此文件output.txt将占用8.8TB,因此......最好先释放一些硬盘空间。

现在显然,这绝对令人难以置信。您能否提供有关“旧”程序如何查询文件的更多信息?因为我有一个强烈的预感,有一些bash / DOS批处理技巧,你可以用来模拟包含这些数字的文件,而不需要实际需要该文件。