Matlab:如何实现动态向量
我指的是这样一个例子 我有一个函数来分析向量“input”的元素。如果这些元素有一个特殊的属性,我将它们的值存储在一个向量“output”中。 问题是在乞讨时,我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。 我有一个循环,在里面我绕着向量,通过索引输入。当我考虑特殊性时,这个向量的一些元素捕获了“输入”的值,并通过这样的句子将其存储在向量“输出”中: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' ...
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=[]代码>在开头。而且性能非常糟糕。因此,当您不关心性能时,这是一个很好的解决方案:-)您会发现这些很有用:,