矩阵排名无法按照并行 colt 中的 API 规范工作



我正在使用并行柯尔特,其中我需要找到矩阵的等级。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对象。知道为什么运行时异常会发生?

,正如消息所说的那样,它确实需要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的实例,而不是您当前发送的任何内容。

相关内容

  • 没有找到相关文章

最新更新