当循环具有“联合”功能时,在MATLAB中预分配

时间:2014-07-16 16:01:31

标签: matlab

假设有一个应该预先分配的循环。它可以通过“零”“eye”“NAN”矩阵来完成。问题是当使用这三个矩阵中的一个时,在使用 union 函数之后,将保留额外的一行零(或一个或NAN),最后应该删除。

例如:

Q=[0 0];

for i=1:10
q=  [rand(1) 2*rand(1)];
Q= union(Q,q,'rows');
end

因此, [0 0] 数组保留在矩阵的开头,应删除。

Q(1,:)=[];

我想知道你是否可以帮助一个可以重新分配而不需要删除第一行的代码。

P.S。只是图像有保持联合和循环的原因。

谢谢

1 个答案:

答案 0 :(得分:1)

不要求你不想要的工会:

Q = [];

for i=1:10
    q = [rand(1) 2*rand(1)];
    if(isempty(Q))
        Q = q;
    else
        Q = union(Q,q,'rows');
    end
end

或者,不是用你不想要的值初始化Q,而是用你想要的值初始化它:

Q = [rand(1) 2*rand(1)];

for i=1:9
    q = [rand(1) 2*rand(1)];
    Q = union(Q,q,'rows');
end

这与预分配无关。 union的工作方式强制它每次都为Q返回一个新值,这意味着你会覆盖以前的值。 preallocation是将数据插入到适当大小的输出矩阵的正确位置时,以避免因调整输出大小而产生额外的内存分配。