Jama でこの ArrayIndexOutOfBounds エラーを修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2112987

質問

マトリックスには jama ライブラリを使用しています。次の行列を使用しましたが、Sを取得しようとするとエラーが発生しました。

1.0    1.0    0.0    1.0    0.0    0.0    0.0    0.0    0.0   11.0    1.0
1.0    0.0    0.0    0.0    0.0    0.0    1.0    0.0    0.0   12.0    2.0
1.0    1.0    0.0    0.0    0.0    0.0    0.0    0.0    1.0   13.0    3.0

S を取得しようとすると、次のエラーが発生します。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Jama.SingularValueDecomposition.getS(SingularValueDecomposition.java:507)
    at SVD2.main(SVD2.java:19)

コードは次のとおりです

public class SVD2 {
    public static void main(String[] args) {
        double[][] vals = {
              {1,1,0,1,0,0,0,0,0,11,1},
              {1,0,0,0,0,0,1,0,0,12,2},
              {1,1,0,0,0,0,0,0,1,13,3}
              };
        Matrix A = new Matrix(vals,3,11);
        System.out.println("The Matrix A is ");
        A.print(11, 2);
        System.out.println();

        System.out.println("The SVD of A is ");
        SingularValueDecomposition svd = A.svd();
        Matrix S = svd.getS();       
    }

}
役に立ちましたか?

解決

のために ジャマさん 特異値分解、 行数は列数以上でなければなりません. 。おそらく、提供した行列の転置で SVD を試してみるとよいでしょう。

編集: 関連するコードは次のとおりです SingularValueDecomposition.java:

   public Matrix getS () {
      Matrix X = new Matrix(n,n);
      double[][] S = X.getArray();
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            S[i][j] = 0.0;
         }
         S[i][i] = this.s[i];
      }
      return X;
   }

S になるように構築されています n x n 配列なので、唯一可能なソースは ArrayIndexOutOfBoundsException への参照からです this.s[i].

のためのスペース s で初期化されます SingularValueDecomposition 次のようなコンストラクター (他にはありません):

s = new double [Math.min(m+1,n)];

したがって、Jama 実装は 2x3 入力に対して機能します (クラス javadoc での記述と矛盾します)。ただし、2x4 入力では機能しないと思います。

他のヒント

あなたは私たちが行列にアクセスしているコードを表示してもらえますか?あなたがはっきり得る例外は、基になる配列の法的境界のインデックス外にしようとしていることを示しています。

これは、3X11の配列です。私は4を=のためにあなたが範囲の例外のうちのインデックスを取得しているという事実は、あなたの行数が間違ってどこかに指定されていることを私に示唆ます。

はApache Commonsの数学のかもしれないのヘルプなどの別のライブラリーが、私は、ライブラリがここでの問題であるとは考えていません。それは本当の問題だとSVDの理解のあなたの不足です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top