Re: [問題] 有關矩陣內的元素的位置已回收
: → promessa:原來元素的位置也可以用 a(k) 來表示,之前一直以為要用 10/15 14:37
: → promessa:a(m,n) 的形式. 10/15 14:37
應該說矩陣在記憶體內部儲存時
本來就是用一個column在儲存的
是因為有一個index換算
才能表現多個維度
matlab內建指令有ind2sub和sub2ind可以讓使用者簡單做做兩者的互相換算
而這個換算在寫程式是個很重要的一個地方
因為做index換算是要時間的
所以避免掉愈多index換算可以讓程式效率更好
用矩陣乘法來舉例的話(雖然matlab內建矩陣乘法了)
最簡單的直觀寫法是使用三個迴圈
for i = 1 : L
for j = 1 : N
C( i , j ) = 0 ;
for k = 1 : M
C( i , j ) = C( i , j ) + A( i , k ) * B( k , j ) ;
end
end
end
最長那一行可以看到進行了四次index換算
如果把矩陣乘法做個小改寫的話
for i = 1 : L
for j = 1 : N
temp = 0 ;
for k = 1 : M
temp = temp + A( i , k ) * B( k , j ) ;
end
C( i , j ) = temp ;
end
end
原本很長的那一行的index換算從四次變成了兩次
在進行大型矩陣乘法時
會比原來的程式碼快上非常多
所以要進行程式碼加速的話
矩陣index換算的數量也是一個可以下手的地方
--
Deserves death! I daresay he does. Many that live deserve death. And some die
that deserve life. Can you give that to them? Then be not too eager to deal out
death in the name of justice, fearing for your own safty. Even the wise cannot
see all ends.
Gandalf to Frodo
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.25.235
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 5 篇):