2012-04-09 11 views
2

こんにちは私はスパース行列の乗算について多くの質問があることを知っていますが、答えの多くは単にライブラリを使用すると言います。私はライブラリ関数を使わずにそれをやりたいこれまでのところ、マトリックスを
要素配列
列配列
行配列の形にする簡単な部分を行っています。Javaでのスパース行列の乗算

私が助けが必要なのはロジック部分です。行列AがM * Nで、行列BがN * Pならば、どうすればよいでしょうか?私は行列Aの要素を繰り返し処理してrowA == colBかどうかを調べ、もしそうならcolA == rowBで、それが真であれば乗算することを検討した。私は現在、自分のバージョンが間違っていることを知っていますが、正しい方法を考えることはできません。

for(int i = 0; i < rows; i++) 
{ 
    sum = 0;  
    for(int k = 0; k < cols; k++) 
     if (row_values.get(i) == col_valuesb.get(k)) 
      if (col_values.get(i) == row_valuesb.get(k)) 
      { 
       sum += (short) (elements.get(i)*elementsb.get(k)); 
      } 
    elementsc.add(sum); 
    row_valuesc.add(row_values.get(i)); 
    col_valuesc.add(col_values.get(k)); 
} 

答えて

0

あなたは言った:

を "私はそれがROWA == COLBだ場合、行列Aの要素を反復してチェックみなさ>とコーラ== rowBもしそうならば、"

さて、二つの行列は、定義により、あなたは

if (row_values.get(i) == col_valuesb.get(k)){ 
      if (col_values.get(i) == row_valuesb.get(k)) 
      { 
を変更するべきではありません、場合にのみで、colA == rowB場合乗算することができますので、

だけではなく、それ

if (row_values.get(i) == col_valuesb.get(k)){ 

作りますか?