在MATLAB中从for循环存储矢量的更有效方法?

时间:2019-02-28 10:58:37

标签: matlab

我正在尝试从for循环中存储列向量。

请参见以下代码:

for i = 1:10
a=rand(10,1)
astore = [a a a a a a a a a a a]
end

我知道必须有一种更有效的方法来做到这一点。特别是如果我在哪里,说我= 1:5000?

1 个答案:

答案 0 :(得分:1)

正如注释中所阐明的那样,您想附加到astore上,而不是在每个循环中都覆盖它。

您应该为内存效率预先分配输出

k = 10; % number of iterations
aHeight = 10; % Height of each a matrix in the loop. 
astore = NaN( aHeight, k );
for ii = 1:k
    a = rand( aHeight, 1 );
    astore( :, ii ) = a;
end

我假设您的示例中的aHeight是一致的,但是如果不是,则可以使用单元格数组

k = 10;
astore = cell( 1, k );
for ii = 1:k
    a = rand( 10, 1 ); % could be anything
    astore{ ii } = a;
end

预分配比使用astore(end+1) = aastore = [astore, a]之类的方法在循环中追加更好。尽管这两个都是有效的选项。