Я использую parallel colt, где мне нужно найти ранг матрицы. Документация API говорит следующее о следующем о DoubleAlgebra#rank
:Матричный ранг не работает согласно спецификациям API в параллельном colt
ранга (DoubleMatrix2D 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 */ }
BottomLine, везде я вижу требование для DoubleMatrix2D
объекта, а не a DenseDoubleMatrix2D
объект. Любая идея, почему происходит исключение во время выполнения?
Можете ли вы показать нам что-нибудь о матрице, которую вы пытаетесь вычислить ранг? На что это похоже? Что это за экземпляр класса? – ashes999
Как бы вы выполнили [Различия в единичном значении] (http://en.wikipedia.org/wiki/Singular_value_decomposition) с разреженной матрицей? –