将值推送到控制循环中的向量

时间:2014-12-31 15:58:00

标签: matlab vector octave

在MATLAB中有一种方法可以定义一个变量say runningValue 并将值连续不断地推送到它上面吗?

我一直在做的是这样的事情:

runningValue = 0;
for j=1:length(someVector)
    ...
    runningValue(end+1) = (some value);
    ...
endfor

但这会强制领先0.我知道在完成所有工作之后我可以放 j(1)= []; 但我想知道是否有更优雅的方法来做到这一点

请注意, runningValue 变量的长度不是先验已知的;特别是,我们没有填充 length(someVector)元素,参考上面的伪代码, j 索引是没有用的。

2 个答案:

答案 0 :(得分:1)

除了将runningValue初始化为空之外,您还可以尝试减少附加数量,这是一个O(n)操作。不是在每个循环上附加元素,而是在数组满时将其大小加倍。这样,您可以将附加数量从n减少到log(n):

runningValue = [];
len = 0;
for j = 1:n
  if (j > len) 
    runningValue = [runningValue zeros(size(runningValue))];
    len = length(runningValue);
  end
  runningValue(j) = (some value);
end
runningValue(j+1:len) = []; % If you need to remove the extra zeros

答案 1 :(得分:0)

您可以使用现有向量和另一个元素简单地构造一个新向量:

runningValue = [];
for j=1:5
    runningValue = [runningValue i]; % i can be the element you want to append to the vector
end

此代码将输出:

runningValue =

   1   2   3   4   5