首页 > 解决方案 > 计算 10000 x 10000 矩阵的互相关

问题描述

我正在使用 xcorr 作为波纹管

simM=xcorr(data,10,'normalized');

这里 data 是 1200 x 1200 double ,输出即 simM 是 21*1440000 double 。现在我想计算更多的值,但我的 . 系统内存只有 64 GB。对于大于 1500 x 1500 的数据,系统会发出内存不足错误。这是可以接受的。因此,根据我在 MATLAB 社区中阅读的一些答案,我发现拆分矩阵是一种选择。但你能描述一下我该怎么做吗?对于 1100 x 1100 样本,如果可能的话,我的系统消耗的时间是 147 秒,您能否提出一种提高速度的方法。

标签: matlabbigdataautocorrelation

解决方案


在 d 的列上循环

for i=1:1200
  for j=1:1200
    simulation((i-1)*1200+j)=xcorr(d(:,i),d(:,j),10,'normalize');
  end
end

for speed 将你的 double 转换为 single , (single(d)) 它减少了 ram 的使用和计算时间,你可以使用 parfor 或 gpu 计算来进一步加快 for 循环。

d=single(d);
d=gpuArray(d);
...

推荐阅读