我在避免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
因此編輯你的問題,有人可能會對你的情況表示同情。但不是我。這並不是說我不在乎,我真的是,真的,但是這裏是啤酒。 –