Matlab:如何实现动态向量

Matlab:如何实现动态向量,matlab,dynamic,vector,language-implementation,Matlab,Dynamic,Vector,Language Implementation,我指的是这样一个例子 我有一个函数来分析向量“input”的元素。如果这些元素有一个特殊的属性,我将它们的值存储在一个向量“output”中。 问题是在乞讨时,我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。 我有一个循环,在里面我绕着向量,通过索引输入。当我考虑特殊性时,这个向量的一些元素捕获了“输入”的值,并通过这样的句子将其存储在向量“输出”中: For i=1:N %Where N denotes the number of elements of 'input' ...

我指的是这样一个例子 我有一个函数来分析向量“input”的元素。如果这些元素有一个特殊的属性,我将它们的值存储在一个向量“output”中。 问题是在乞讨时,我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。 我有一个循环,在里面我绕着向量,通过索引输入。当我考虑特殊性时,这个向量的一些元素捕获了“输入”的值,并通过这样的句子将其存储在向量“输出”中:

For i=1:N %Where N denotes the number of elements of 'input'
...
output(j) = input(i);
...
end
问题是,如果我之前没有“声明”输出,我会得到一个错误。我不喜欢在作为output=input到达循环之前“声明”‘output’,因为它存储我不感兴趣的输入值,我应该想办法删除我存储的所有与我无关的值。 有人告诉我这个问题吗?
谢谢。

简单的解决方案是:

% if input(i) meets your conditions
output = [output; input(i)]

虽然我不知道这是否具有良好的性能

for循环中的逻辑有多复杂

如果简单的话,像这样的方法会奏效:

output = input ( logic==true )
或者,如果逻辑很复杂,并且您处理的是大向量,我会预先分配一个向量来存储是否保存元素。下面是一些示例代码:

N = length(input); %Where N denotes the number of elements of 'input'
saveInput = zeros(1,N);  % create a vector of 0s
for i=1:N
    ...
    if (input meets criteria)
        saveInput(i) = 1;
    end
end
output = input( saveInput==1 ); %only save elements worth saving

如果
N
不是太大以至于会导致内存问题,则可以将
输出
预先分配给与
输入
大小相同的向量,并删除循环末尾的所有无用元素

output = NaN(N,1);
for i=1:N
...
output(i) = input(i);
...
end
output(isnan(output)) = [];
有两种选择

如果
output
的大小被分配为
N
,则它会太大,或者如果您不知道
output
的大小上限,则可以执行以下操作

lengthOutput = 100;
output = NaN(lengthOutput,1);
counter = 1;
for i=1:N
   ...
   output(counter) = input(i);
   counter = counter + 1;
   if counter > lengthOutput
       %# append output if necessary by doubling its size
       output = [output;NaN(lengthOutput,1)];
       lengthOutput = length(output);
   end
end
%# remove unused entries
output(counter:end) = [];
最后,如果N很小,调用

output = [];
for i=1:N
   ...
   output = [output;input(i)];
   ...
end

请注意,如果N变大(比如>1000),性能会急剧下降。

您需要添加
output=[]在开头。而且性能非常糟糕。因此,当您不关心性能时,这是一个很好的解决方案:-)您会发现这些很有用:,