在循環語句中對某個很大的矩陣做插入操作,由於循環次數過大,在後期的時候十分緩慢,具體代碼大概如下:
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的消耗。