0
我有一个包含一个巨大的值的量(约4个百万值,一个用于上述TXT文件中的每一行)一个TXT文件的量的自相关和我想用MATLAB函数autocorr
,以便计算上述一系列值的自相关。MATLAB - 巨大值
我的问题是,MATLAB不允许我创建一个具有尽可能多的元素的矢量,但是它的矢量大小仅限于〜25000个元素(在64位操作系统上)。
什么将是一个聪明的方式来进行?提前谢谢了!
我有一个包含一个巨大的值的量(约4个百万值,一个用于上述TXT文件中的每一行)一个TXT文件的量的自相关和我想用MATLAB函数autocorr
,以便计算上述一系列值的自相关。MATLAB - 巨大值
我的问题是,MATLAB不允许我创建一个具有尽可能多的元素的矢量,但是它的矢量大小仅限于〜25000个元素(在64位操作系统上)。
什么将是一个聪明的方式来进行?提前谢谢了!
最简单的方法可能是将文件数据分块,计算每个块的自相关,然后汇总结果。
在此基础上扩展一点,您也可以使用移动窗口而不是离散块(例如:观察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循环的代价非常昂贵,您也可以直接在读取文件块的循环中计算自相关值。这样你将直接收到最终结果。
我不认为应该有一个问题,在今天的任何一台电脑中生成400万条记录。 'double'值需要64位或8字节,所以你大概需要8 * 4 = 24 MB的RAM。 – flawr