matlab - 计算 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 秒,您能否提出一种提高速度的方法。
解决方案
在 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);
...
推荐阅读
- mysql - 如何将列与sql中具有相同名称的列连接起来?
- python - Conv1D:ValueError:层序贯_1的输入0与层不兼容::预期的min_ndim = 3,发现ndim = 2。收到的完整形状:(无,2)
- reactjs - 如何在 React 中回调类的状态值?
- python - 从列表中分离字符串对
- python - Python Regex:在带有模式的文本中查找单词的所有可能形式
- rhel - 无法使用开发人员帐户向 RHEL 订阅管理器注册
- windows - windows可执行文件如何知道它是否从控制台打开
- java - 尝试使用 Net Beans Gui Generator 在 JPanel 上绘制点
- c# - WPF/XAML 看起来不像系统主题
- javascript - 使用 jquery/javascript 在下拉菜单中动态选择选项仅有时有效