开始Matlab问题(零矩阵)

时间:2010-06-24 05:24:31

标签: matlab

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

A=zeros(5,5);
for i = 1:5
  A(i)=exp(i);
end

4 个答案:

答案 0 :(得分:6)

继j_random_hacker的回答之后,在MATLAB中预先分配数组而不是让MATLAB扩展它会更有效率。如果只是简单地从数组的当前“结束”分配元素,MATLAB可以扩展数组,如下所示:

x = []
for ii=1:1e4
  x(ii) = 1/ii;
end

这样效率非常低,因为在循环的每一步中,MATLAB都会将“x”重新分配为比以前更大的一个元素。以下更快:

x = zeros( 1, 1e4 );
for ii=1:1e4
  x(ii) = 1/ii;
end

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

答案 1 :(得分:1)

这与询问相同:为什么要创建值为0的变量?

如果您计划以某种方式累积一堆结果,通常会这样做。在这种情况下,你必须从“某个地方”开始。

答案 2 :(得分:0)

尽管可以从空矩阵开始并通过连接(添加)新元素来扩展它,但是在MATLAB中向量扩展效率非常低,因为每次连接另一个元素时它需要新的内存。预分配建立一个预先正确大小的矩阵,然后每个零元素可以用正确的值替换。这种方法效率更高,特别是在涉及循环的程序中。

答案 3 :(得分:-1)

如果您要处理大型矩阵,这将非常有用。或者,如果您打算使用稀疏矩阵。当您反复使用相同的矢量或矩阵时,这也很有用。