對不起,這個模糊的問題,但我希望對一個有經驗的Haskeller這是一個明智之舉。對於對稱矩陣,Data.Map與Data.Array?
我有表示和操縱對稱矩陣,所以有基本上爲數據類型三個不同的選項:
完整矩陣存儲兩個
(i,j)
和(j,i)
元件,雖然m(i,j) = m(j,i)
數據。陣列(Int,Int)Int
一張僅存儲元素
(i,j)
與i <= j
(上三角形AR矩陣)Data.Map(INT,INT)中等
通過
k
索引的矢量,存儲給定的一些矢量順序f(i,j) = k
Data.Array詮釋詮釋
許多操作對矩陣都是必需的,更新單個元素,查詢行和列等。但是,它們主要充當容器,沒有線性代數運算(反演,det等c)將是必需的。
如果矩陣的維數將在20x20
左右,哪一個選項是最快的選項?當我理解正確的時候,每個更新(在數組情況下爲(//)
)需要完整副本,因此在情況2或3中從20x20=400
元素到20*21/2 = 210
元素會有很大的意義,但是對於情況2 。和3.需要在某個時候進行轉換。
是否有任何指導方針?
順便說一句:第三個選項不是一個很好的選擇,因爲計算f^-1
需要平方根。
如果矩陣規模較小,如20×20,你不需要平方根爲3.您至少可以使用表格查找,但可能有更好的方法。 –