我使用平行小马,其中我需要找到矩阵的秩。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 ),当我在代码中ctrl+click方法名时,它会转到源代码,如
public int rank(cern.colt.matrix.tdouble.DoubleMatrix2D doubleMatrix2D) { /* compiled code */ }底线,我在任何地方都能看到对DoubleMatrix2D对象的需求,而不是DenseDoubleMatrix2D对象。知道为什么会出现运行时异常吗?
发布于 2014-01-27 19:49:55
就像消息说的那样,它确实需要一个DenseDoubleMatrix2D实例。
下面是源跟踪的内容(使用A进行简化,始终保持相同的名称):
DoubleAlgebra.rank(DoubleMatrix2D A): return svd(A).rank();
> svd(DoubleMatrix2D A): return new DenseDoubleSingularValueDecomposition(A, true, true);
> DenseDoubleSingularValueDecomposition(): checkDense(A);对于checkDense本身:
public void checkDense(DoubleMatrix2D A) {
if (!(A instanceof DenseDoubleMatrix2D) && !(A instanceof DenseColumnDoubleMatrix2D))
throw new IllegalArgumentException("Matrix must be dense");
}您可以看到实际的异常代码这里。
您可能要做的是只使用DenseDoubleMatrix2D的一个实例,而不是当前发送的任何内容。
https://stackoverflow.com/questions/21316299
复制相似问题