MATLAB:如何实现动态向量
-
14-10-2019 - |
题
我指的是这样的示例,我有一个函数来分析向量“输入”的元素。如果这些元素具有特殊属性,我将其值存储在向量“输出”中。问题是,在乞讨中,我不知道它需要存储在“输出”中的元素数量,所以我不知道它的大小。我有一个循环,内部我围绕向量,通过索引“输入”。当我认为该向量的特殊元素捕获“输入”的值,并通过这样的句子将其存储在向量的“ 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),则性能会大大降级。
不隶属于 StackOverflow