あいまいな質問には申し訳ありませんが、私は経験豊かなHaskellerに願っています。Data.Map対Data.Array対称行列のですか?
Iは、対称行列を表し、操作する持っているので、データ・タイプのための3つの異なる選択肢基本的にありますm(i,j) = m(j,i)
データが、両方(i,j)
と(j,i)
要素を格納
完全行列は配列(Int、Int)Int
マップのみ、要素を格納
(i,j)
とi <= j
(上三角上三角行列を格納ARマトリックス)Data.Map(INT、INT)のInt
k
によってインデックス付けベクトルは、いくつかのベクトルの順序f(i,j) = k
Data.ArrayのIntのInt
多くの演算が行列上で必要となり、単一の要素を更新し、行と列などをクエリします。しかし、それらは主にコンテナとして機能し、線形代数演算(inversion、det、et c)が必要となります。
マトリクスの次元数が約20x20
になる場合、どのオプションのうち最も高速なものがありますか?私が正しく理解すると、すべてのアップデート(アレイの場合は(//)
)は完全なコピーが必要なので、ケース2または3の20x20=400
の要素から20*21/2 = 210
の要素に行くことは意味がありますが、ケース2の場合はアクセスが遅くなります3.ある時点で変換が必要です。
ガイドラインはありますか?
Btw:コンピューティングf^-1
は平方根を必要とするため、3番目のオプションは本当に良い方法ではありません。
マトリクスサイズが20×20のように小さい場合、あなたは平方根を必要としません3.良い方法があるかもしれませんが、少なくともテーブルルックアップを使うことができます。 –