Matlab:如何实现动态矢量

时间:2010-12-30 14:34:22

标签: matlab dynamic vector language-implementation

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

For i=1:N %Where N denotes the number of elements of 'input'
...
output(j) = input(i);
...
end

问题是,如果我以前没有“声明”'输出',我会收到错误。我不喜欢在输出到输出之前“声明”'输出',因为它存储了我不感兴趣的输入值,我应该想办法删除我存储它的所有值与我有关。 有没有人对这个问题有所启发? 谢谢。

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

简单的解决方案是:

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

虽然我不知道这是否有良好的表现

答案 2 :(得分:1)

如果N不是太大会导致内存问题,您可以将output预分配给与input大小相同的向量,并删除所有无用的内容循环结束时的元素。

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) = []; 会太大,您可以执行以下

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

最后,如果N很小,那么调用

就完全没问题了
{{1}}

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