衆所周知,Matlab的矩陣操作給運算帶來極大的方便。但有時候遇到一些問題,第一時間想到的解決方案是for循環,但說實話,對於某些大的程序,for循環消耗的資源太大;即使有時候for循環能解決問題,對於完美主義者,還是想精簡再精簡。遇到這個時候,轉換思維方式,往往用變換矩陣的方式就能解決問題。
最近也是在探索總結中,此處舉一簡單例子。
Matla中定義圖像特徵的非相似度,如下公式所示:
傳統方案:for循環
sum = 0;
for i =1:Ng
for j =1:Ng
sum = sum +abs(i-j).*P(i,j)
end
end
更精簡的方案:矩陣變換
Matrix_i = repmat([1:Ng]',1,Ng);
Matrix_j = repmat([1:Ng],Ng,1);
Sub = abs(Matrix_i - Matrix_j);
Dissi = sum(sum(Sub.*P));
此處先做簡答總結,以後遇到更多例子再補充。