【问题标题】:How to make a two-dimensional matrix w/o for?如何制作不带的二维矩阵?
【发布时间】:2021-05-13 11:21:53
【问题描述】:

我现在正在为二维图编码矩阵。 虽然是这么简单的等式,但执行起来却需要很多时间。我认为它可以变得更快。 特别是,我认为“for - command term”可以简化。 我该如何简化?

q=1:1:30
x(q)=330+q*0.3
F=1:30:8970
T=x(1)-0.3:0.001:x(30)+0.3
n=size(T,2)
k=1:1:n
for a=1:1:30
I(a,k)=F(a)*exp(-2.*(T(:,k)))
end
happy=sum(I)
plot(k,I)

【问题讨论】:

  • 这段代码不应该花很长时间,for循环也不应该让它更快。唯一需要较长时间的是屏幕上的打印(因为您还没有添加;)。这段代码(没有情节)在我的电脑上运行 10 毫秒(但如果你全部打印到屏幕上,则需要 4.7 秒)。你想要比那更快吗?

标签: matlab matrix simplify


【解决方案1】:

我会说时间是用来打印结果的。尝试在每行末尾使用;,它会加快计算速度。

您还可以通过以下逐个元素的计算来替换 for 循环:

a = (1:1:30).';
aux = repmat(exp(-2.*(T(:,k))), length(a), 1);
a = repmat(a, 1, length(k));
I = a.'.*aux.';

【讨论】:

  • 请注意,这仅比预分配 I 并运行循环快一点。但是赞成,因为它确实是一个稍微快一点的解决方案。不过,为了清楚起见,我仍然会使用 for 循环。
  • @AnderBiguri,我同意你的看法。添加;会足够快。
  • 我从未考虑过打印时间。添加后;它变得更快了!我也会参考你的代码。感谢@PedroRodriguez 和 AnderBogior 教我。