Convert matrix back to array in EJML
我已经开始使用EJML库来表示矩阵。我将使用
是否可以将矩阵转换回一维双精度数组(
是否可以删除行或列?
顺便说一句,有人知道在运行时方面EJML与Jeigen在大型矩阵方面的比较吗? EJML提供了更多功能,并且文档化得更好,但就运行时而言我有点担心。
的字段
1 2 | // where matrix is a SimpleMatrix double[] data = matrix.getMatrix().data; |
我看不到删除任意行,列的直接方法。一种解决方法是使用
1 2 3 4 | SimpleMatrix fullMatrix = new SimpleMatrix(new double[][]{{2, 3, 4}, {7, 8, 9}}); SimpleMatrix a = fullMatrix.extractMatrix(0, 2, 0, 1); SimpleMatrix b = fullMatrix.extractMatrix(0, 2, 2, 3); SimpleMatrix matrix = a.combine(0, 1, b); |
或者要专门删除第一列,您可以简单地执行以下操作:
1 | SimpleMatrix matrix = fullMatrix.extractMatrix(0, 2, 1, 3); |
或者要专门删除最后一列,您可以简单地执行此操作(不删除,复制基础
1 | matrix.getMatrix().setNumCols(matrix.numCols() - 1); |
对于各种Java矩阵库的基准测试/性能,我将参考此答案。 ejml的性能在小型矩阵中表现出色,并且大小为100或更大的文件与本机C / C库(如Jeigen)支持的库无法很好地竞争。和往常一样,您的里程可能会有所不同。
Manos对第一个问题的回答对我不起作用。这是我所做的:
1 2 3 4 5 6 7 8 9 | public double[][] matrix2Array(SimpleMatrix matrix) { double[][] array = new double[matrix.numRows()][matrix.numCols()]; for (int r = 0; r < matrix.numRows(); r++) { for (int c = 0; c < matrix.numCols(); c++) { array[r][c] = matrix.get(r, c); } } return array; } |
我不知道它在性能上与其他方法相比如何,但是它可以足够快地满足我的需求。