行列のランクを見つける必要がある並列コルトを使用しています。APIドキュメントには、次について次のように記載されていますDoubleAlgebra#rank
。
ランク(DoubleMatrix2D A)
特異値分解から取得した行列 A の有効数値ランクを返します。
しかし、コードで使用すると、実行時に IllegalArgumentException が発生します。
Exception in thread "main" java.lang.IllegalArgumentException: Matrix must be dense
at cern.colt.matrix.tdouble.algo.DoubleProperty.checkDense(Unknown Source)
at cern.colt.matrix.tdouble.algo.decomposition.DenseDoubleSingularValueDecomposition.<init>(Unknown Source)
at cern.colt.matrix.tdouble.algo.DenseDoubleAlgebra.svd(Unknown Source)
at cern.colt.matrix.tdouble.algo.DenseDoubleAlgebra.rank(Unknown Source)
API は、行列が密である必要があることを述べていません。私の IDE (私は Intellij IDEA を使用しています) で、コード内のメソッド名を ctrl キーを押しながらクリックすると、ソースが表示されます。
public int rank(cern.colt.matrix.tdouble.DoubleMatrix2D doubleMatrix2D) { /* compiled code */ }
DoubleMatrix2D
要するに、オブジェクトではなく、オブジェクトの要件がどこにでもありDenseDoubleMatrix2D
ます。実行時例外が発生する理由は何ですか?