gpt4 book ai didi

java - 在 EJML 中将矩阵转换回数组

转载 作者:行者123 更新时间:2023-11-30 10:49:47 25 4
gpt4 key购买 nike

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

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

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

顺便问一下,有人知道 EJML 与 Jeigen 在运行时方面的大型矩阵相比如何吗? EJML 提供了更多的功能并且有更好的文档记录,但我对运行时有点担心。

最佳答案

  1. 可以通过首先获取底层 DenseMatrix64F 然后获取 D1Matrix64F 基类的公共(public) data 字段

    // where matrix is a SimpleMatrix
    double[] data = matrix.getMatrix().data;
  2. 我没有看到删除任意行、列的直接方法。一种解决方法是使用 extractMatrix(它复制底层 double[])来获取原始矩阵的 2 个部分,然后将它们合并到一个新矩阵。例如。删除这个 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)支持的库竞争不佳。一如既往,您的里程可能会有所不同。

关于java - 在 EJML 中将矩阵转换回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35304629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com