开始Matlab问题(零矩阵)

1 matlab

为什么在Matlab中创建一个0的矩阵?例如,

A=zeros(5,5);
for i = 1:5
  A(i)=exp(i);
end
Run Code Online (Sandbox Code Playgroud)

Edr*_*ric 6

继j_random_hacker的回答之后,在MATLAB中预先分配一个数组而不是让MATLAB扩展它是更有效的.如果您只是从数组的当前"结束"分配元素,MATLAB可以扩展数组,如下所示:

x = []
for ii=1:1e4
  x(ii) = 1/ii;
end
Run Code Online (Sandbox Code Playgroud)

这是非常低效的,因为在循环的每一步,MATLAB将重新分配"x"为比以前更大的一个元素.下面是快:

x = zeros( 1, 1e4 );
for ii=1:1e4
  x(ii) = 1/ii;
end
Run Code Online (Sandbox Code Playgroud)

(在这种情况下x = 1./(1:1e4);,可能最快仍然是:,但是当您无法将事物解析为向量化操作时,预分配路由就是您所需要的)

  • 应该注意的是,这种优化虽然总是有用,但在涉及大矩阵之前通常并不重要.制作一个小测试脚本,看看这种效果如何扩展.我个人不担心这个,直到成长矢量中的大约200多个元素. (3认同)