【问题标题】:Convert matrix back to array in EJML在 EJML 中将矩阵转换回数组
【发布时间】:2016-05-20 04:20:16
【问题描述】:

我已经开始使用 EJML 库来表示矩阵。我将使用SimpleMatrix。我没有找到我需要的两件重要的事情。也许有人可以帮助我确定以下操作是否可行,如果可以,如何做到这一点:

  1. 是否可以将矩阵转换回一维双精度数组 (double[]) 或二维双精度数组 (double[][]) 而无需遍历所有效率非常低的元素?我没有找到一种方法。例如,Jeigen 库提供了到一维数组的转换(但我不知道这是如何在内部完成的)。

  2. 是否可以删除行或列?

顺便说一句,有人知道 EJML 与 Jeigen 在运行时方面的大矩阵相比如何吗? EJML 提供了更多的功能,并且文档更加完善,但在运行时方面我有点害怕。

【问题讨论】:

    标签: java matrix ejml


    【解决方案1】:

    Manos 对第一个问题的回答对我不起作用。这就是我所做的:

    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;
    }
    

    我不知道它与其他方法的性能相比如何,但它的运行速度足以满足我的需要。

    【讨论】:

      【解决方案2】:
      1. SimpleMatrix 的底层数组(将所有元素保持在 RAM 中的同一区域始终是一维的)可以通过首先获取底层 DenseMatrix64F 然后获取 @ 的公共 data 字段来检索987654325@基类

        // where matrix is a SimpleMatrix
        double[] data = matrix.getMatrix().data;
        
      2. 我没有看到删除任意行、列的简单方法。一种解决方法是使用extractMatrix(它复制底层double[])来获取原始矩阵的2个部分,然后将combine它们到一个新矩阵。例如。删除这个 2x3 矩阵的中间列:

        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);
        

        或者要专门删除第一列,您可以这样做:

        SimpleMatrix matrix = fullMatrix.extractMatrix(0, 2, 1, 3);
        

        或者专门删除最后一列,你可以简单地做(不删除,复制底层data[]):

        matrix.getMatrix().setNumCols(matrix.numCols() - 1);
        
      3. 我将参考this answer 了解各种 java 矩阵库的基准/性能。 ejml 的性能非常适合小型矩阵,例如大小为 100 或更大的矩阵无法与本地 C/C++ 库(如 Jeigen)支持的库竞争。与往常一样,您的里程可能会有所不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多