2017-11-11 146 views
0

我有一个包含一个巨大的值的量(约4个百万值,一个用于上述TXT文件中的每一行)一个TXT文件的量的自相关和我想用MATLAB函数autocorr,以便计算上述一系列值的自相关。MATLAB - 巨大值

我的问题是,MATLAB不允许我创建一个具有尽可能多的元素的矢量,但是它的矢量大小仅限于〜25000个元素(在64位操作系统上)。

什么将是一个聪明的方式来进行?提前谢谢了!

+0

我不认为应该有一个问题,在今天的任何一台电脑中生成400万条记录。 'double'值需要64位或8字节,所以你大概需要8 * 4 = 24 MB的RAM。 – flawr

回答

0

最简单的方法可能是将文件数据分块,计算每个块的自相关,然后汇总结果。

在此基础上扩展一点,您也可以使用移动窗口而不是离散块(例如:观察1-30,然后2-31,然后3-32,...)。

但让我们坚持第一种方法。这是一个可以让你指定一个块的长度,然后读取文件块:

function res = readFileChunks(file,chunkSize) 
    fid = fopen(file,'r'); 

    if (fid < 0) 
     error('Cannot open file "%s".',file); 
    end 

    res = {}; 

    while (~feof(fid)) 
     res{end+1} = fscanf(fid,'%f',[1 chunkSize])'; 
    end 

    fclose(fid); 
end 

例子:

res = readFileChunks('data.txt',2500); 

现在,所有你需要做的就是清理你的结果(结算,对于例如,由空文件行引起的空单元格)并将您的自相关处理为每个矢量的循环。

由于Matlab循环的代价非常昂贵,您也可以直接在读取文件块的循环中计算自相关值。这样你将直接收到最终结果。