我在避免Matlab中的循环时遇到了问题。我被告知循环会导致糟糕的表现,所以我正在修改已经在循环中工作的代码。检查x是否在没有循环的间隔中
我有一个矢量大矢量x包含值和一个较小的X,也包含值。对于每个值x,我必须知道它在哪个区间。我将第i个区间定义为X_i-1和X_i之间的值。现在,我这样做:
len = length(x);
is = zeros(len, 1); % Interval for each x
for j=1:len
i=1; % Start interval
while(x(j)<X(i-1) || x(j)>X(i)) % Please consider accessing X(0) won't crash it's a simplification to make the code clearer for you.
i = i + 1;
end
is(j) = i;
end
没有这些循环做到这一点的方式是什么?
编辑:为了帮助你了解情况,这里有一个我想在这里做的事情的真实例子。利用这些输入
X = [1 3 4 5]
x = [1 1.5 3.6 4.7 2.25]
我想is
是
% The 2 first and the 5th are in the first interval [1, 3]
% The 3rd is in [3, 4] and the 4th is in [4, 5]
is = [1 1 2 3 1]
有人告诉你错了,循环不(无条件地)导致性能下降。最近发布的Matlab与等效向量化代码的性能相比,稳定地改进了循环的性能(一般情况下)。现在你已经被告知,否则,你是否还想重做你的代码? –
其实我会被认为循环不好的同一个人分级,所以我有点不得不重做它,即使它不是真的有必要... – francoisr
因此编辑你的问题,有人可能会对你的情况表示同情。但不是我。这并不是说我不在乎,我真的是,真的,但是这里是啤酒。 –