我想将非常大的矩阵转换为格式化的单元格字符串。我已经创建了以下代码,但它非常慢,我想尽可能地改进它。
tic
r = rand(1000,1000);
p = rand(1000,1000);
a = cellstr(num2str(r(:),'%+.2f'));
a = strrep(a,'+',' ');
a = strrep(a,'0.','.');
a = strcat(a(:),{' '});
idx_05 = find(p<.05);
idx_01 = find(p<.01);
a(idx_05) = strrep(a(idx_05),' ','* ');
a(idx_01) = strrep(a(idx_01),'* ','**');
a = reshape(a,size(r));
toc
经过的时间是9.968568秒。
答案 0 :(得分:1)
由于问题似乎位于strcat
- 命令中,我们可以找到另一种方法来实现相同的结果。 strrep
- 命令似乎执行得非常快,所以让我们再次使用它。
在num2str
使用的格式字符串中添加一些额外的字符。用空格替换后。这样我们就不需要strcat
。
a = cellstr(num2str(r(:),'%+.2fAA'));
a = strrep(a,'AA',' ');
以下是我的时间:
每种方法10次测量的平均值(i5,2.5GHz)
11.41s -> OP's code
5.07s -> proposed solution
这相当于 44.4 %的改善。