MATLAB有效地将矩阵转换为格式化的单元串

时间:2015-07-01 02:47:44

标签: matlab

我想将非常大的矩阵转换为格式化的单元格字符串。我已经创建了以下代码,但它非常慢,我想尽可能地改进它。

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秒。

1 个答案:

答案 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 %的改善。