在循環語句中對某個很大的矩陣做插入操作,由于循環次數過大,在後期的時候十分緩慢,具體代碼大概如下:
fori = 1:5000
i
n=X(i,1);
forj= 1:n
num = num +1;
S(num,1)=…;
S(num,2)=…;
S(num,3)=…;
End
End
上述代碼運作時,當i大于200時開始出現明顯的運作緩慢,若直接運作可能需要超過5個小時。
我對上述代碼進行優化,首先計算25個i的循環,然後将結果儲存在一個臨時變量ST矩陣中,然後進行矩陣合并操作:S=[S; ST],大大的加快了上述代碼的運作,運作時間2分鐘。代碼如下:
function ST = subCount( a,X )
startData = datenum('2015-01-01 02:45:17','yyyy-mm-dd HH:MM:SS');
sum=0;
for i = a:a+24
i
n=X(i,1);
for j= 1:n
…
建立子計算函數,計算從a開始的25個i。
S=[];
St=[];
load('X.mat')
for i=1:200
ST=subCount(1+(i-1)*25,X);
S=[S;ST];
ST=[];
end
建立臨時矩陣ST,然後不斷與S合并。結果大大的降低了運作時間。
總結:
在做大量循環操作是,要考慮MATLAB矩陣運算的便利性,能做矩陣運算的就做矩陣運算,向上文所見,每運作25個i,合并一次矩陣,使用矩陣運算減少了記憶體和CPU的消耗。