我指的是这样的示例,我有一个函数来分析向量“输入”的元素。如果这些元素具有特殊属性,我将其值存储在向量“输出”中。问题是,在乞讨中,我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。我有一个循环,内部我围绕向量,通过索引“输入”。当我认为该向量的特殊元素捕获“输入”的值,并通过这样的句子将其存储在向量的“ outut”中:

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

问题是,如果我以前没有“声明”'输出',我会遇到错误。我不想在输出=输入到达循环之前“声明”'输出',因为它从我不感兴趣的输入中存储值与我有关。有人对这个问题阐明我吗?谢谢你。

有帮助吗?

解决方案

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

其他提示

微不足道的解决方案是:

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

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

如果 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) = [];

最后,如果n很小,请打电话完全很好

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

请注意,如果n变大(例如> 1000),则性能会大大降级。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top