天天看點

Matalb for 語句 操作大矩陣 優化

在循環語句中對某個很大的矩陣做插入操作,由于循環次數過大,在後期的時候十分緩慢,具體代碼大概如下:

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的消耗。

繼續閱讀