首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EJML中将矩阵转换回数组

在EJML中将矩阵转换回数组
EN

Stack Overflow用户
提问于 2016-02-10 00:09:34
回答 2查看 2.1K关注 0票数 4

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

  1. 是否有可能将矩阵转换回一维双数组(double[])或二维双数组(double[][]),而不只是遍历所有的元素,这将是非常低效率的?我没有找到解决这个问题的方法。例如,Jeigen库提供了对1D数组的转换(但我不知道内部是如何实现的)。
  2. 可以删除一行或列吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-11 13:22:47

马诺斯对第一个问题的回答对我没有用。这就是我所做的:

代码语言:javascript
复制
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;
}

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

票数 0
EN

Stack Overflow用户

发布于 2017-01-08 15:55:53

  1. SimpleMatrix的底层数组(将所有元素保持在RAM中的同一区域总是一维的)可以首先获取底层的DenseMatrix64F,然后获取D1Matrix64F基类的公共data字段。 //其中矩阵为SimpleMatrix double[] data = matrix.getMatrix().data;
  2. 我看不出删除任意行和列的简单方法。解决方法之一是使用extractMatrix (复制底层double[])获取原始矩阵的2部分,然后将它们combine到一个新的矩阵中。例如,删除这个2x3矩阵的中间列: SimpleMatrix fullMatrix =新SimpleMatrix (新双{ 2,3,4},{7,8,9});SimpleMatrix a= fullMatrix.extractMatrix(0,2,0,1);SimpleMatrix b= fullMatrix.extractMatrix(0,2,2,3);SimpleMatrix矩阵= a.combine(0,1,b); 或者具体地删除第一列,只需执行以下操作: SimpleMatrix矩阵= fullMatrix.extractMatrix(0,2,1,3); 或者具体地删除最后一列(不删除,复制底层data[]): matrix.getMatrix().setNumCols(matrix.numCols() - 1);
  3. 关于各种java矩阵库的基准测试/性能,我将参考this answer。ejml的性能对于小型矩阵来说是优秀的,而且对于100或更大的矩阵来说,它与由本地C/C++库(如Jeigen)支持的库没有很好的竞争。和往常一样,你的里程可能会有所不同。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35304629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档