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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章