我已经开始使用EJML库来表示矩阵。我将使用SimpleMatrix。我没有找到我需要的两件重要的东西。也许有人可以帮助我确定以下操作是否可行,如果可以,如何做到这一点:
double[])或二维双数组(double[][]),而不只是遍历所有的元素,这将是非常低效率的?我没有找到解决这个问题的方法。例如,Jeigen库提供了对1D数组的转换(但我不知道内部是如何实现的)。顺便问一下,在运行时方面,有人知道EJML如何与Jeigen相比吗?EJML提供了更多的功能,并有了更好的文档化,但我在运行时方面有点担心。
发布于 2020-07-11 13:22:47
马诺斯对第一个问题的回答对我没有用。这就是我所做的:
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;
}我不知道它在性能上如何与其他方法相比,但它的工作速度足以满足我的需要。
发布于 2017-01-08 15:55:53
SimpleMatrix的底层数组(将所有元素保持在RAM中的同一区域总是一维的)可以首先获取底层的DenseMatrix64F,然后获取D1Matrix64F基类的公共data字段。
//其中矩阵为SimpleMatrix double[] data = matrix.getMatrix().data;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);https://stackoverflow.com/questions/35304629
复制相似问题