【问题标题】:MATLAB converting efficiently a matrix into a formated cell stringMATLAB 有效地将矩阵转换为格式化的单元格字符串
【发布时间】:2015-07-01 02:47:44
【问题描述】:

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

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

【问题讨论】:

  • 分析器说大部分时间都花在strcat命令上,所以试着往那个方向看

标签: matlab


【解决方案1】:

由于问题似乎出在strcat-命令中,我们可以找到替代方法来达到相同的结果。 strrep-command 似乎执行得很快,所以让我们再次使用它。

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

【讨论】:

  • 这是一个不错的技巧。是否可以使用 num2str 函数直接添加 2 个空格?为什么 num2str(r(:),'%+.2f ')) 不起作用?
  • @mat 使用num2str 修剪尾随和前导空格。即使使用\x20 以ASCII 表示形式输入也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多