我有以下代碼:
np = 25;
j = 1:3;
count = 2;
for i = 2:total_NN
A(i) = B(j) * C(count, :)';
count = count 1;
% When this condition is met we will add to j and reset count:
if rem(i-np, np-1) == 0
j = j 2;
count = 2;
end
end
我試圖通過洗掉內部 if 陳述句并保留其功能來優化它。我試過這樣做,但它沒有用也沒有消除 if 陳述句:
for i = 2:total_NN
A(i) = B(j) * C(count, :)';
count = count 1;
z = rem(i-np, np-1) != 0;
j = j 2*z;
if rem(i-np, np-1) == 0
count = 2;
end
end
我能做些什么?if 陳述句極大地減慢了我的代碼。
uj5u.com熱心網友回復:
您可以if在回圈之前為每個索引計算條件
np = 25;
j = 1:3;
count = 2;
iArr = 2:total_NN;
r = (rem(iArr-np,np-1) == 0);
for ii = iArr
i = iArr(ii);
A(i) = B(j) * C(count, :)';
count = count 1;
% When this condition is met we will add to j and reset count:
if r(ii)
j = j 2;
count = 2;
end
end
如果沒有完整的示例來測驗或了解記憶體限制,很難驗證任何進一步的優化,但您可能會定義
jArr = (1:3) 2*cumsum(r(:)); % all j values from the loop, select j=jArr(ii,:) for each loop
count和回圈之前類似的東西。在這一點上,您甚至可以對整個矩陣運算進行矢量化,但這超出了這個問題的范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/454806.html
