新しいスパース線形ソルバーのいくつかをテストしたいのですが、マトリックスをすばやく埋める方法があるかどうかを知りたいです。私が興味を持っている形式は CSR (http://goo.gl/hLXYd) です。CSR形式のマトリックスが次のように与えられるとしましょう:
values(num non-zero elements)
columns(num non-zero elements)
rowIndex(num rows + 1)
検討中の疎行列は、ネットワークから派生します。そのため、何千ものノードがあり、そのうちのいくつかはそれらの間を線で接続しています。したがって、マトリックスは構造的に対称です。各接続 (i,j) は、対角項 (i,i) および (j,j) と非対角項 (i,j) および (j,i) に何かを追加します。同じノード (i,j,1)、(i,j,2) 間に複数の接続を作成できます。したがって、2 つの対角要素と 2 つの非対角要素を複数回再検討する必要がある場合があります。
rowIndex(i) を実行することで行の先頭を取得できることはわかっています。次に、j がどこにあるかを見つけるために、要素 columns(rowIndex(i):rowIndex(i+1)-1) を実行する必要があります。
質問:
要素を更新するたびに検索を実行することなく、CSR 形式で要素にすばやくアクセスする方法はありますか?
いくつかの明確化: マトリックスを最初から入力する必要があるだけです。マトリックスは構造的に対称であり、実際には対称ではありません。保存される値は、ネットワーク データ (インピーダンス、抵抗など) に関係しており、実際の値を持っています。一般に、Value(i,j)<>Value(j,i) です。(name1,i1,j1,value1)、(name2,i2,j2,value2) などの形式のタプルがあります。これらのタプルはソートされておらず、2 つのタプルが同じ i,j 値を参照できます。追加される
前もって感謝します!