【问题标题】:DMatrixRMaj: get data in matrix formDMatrixRMaj:以矩阵形式获取数据
【发布时间】:2018-10-20 21:22:45
【问题描述】:

当我在 ejml(实矩阵的标准格式)中初始化一个新的 DMatrixRMaj 时,它可以在内部存储一个 double[][] 矩阵。示例

double[][] a = new double[][];
//init a
DMatrixRMaj d = new DMatrixRMaj(a);
//math operations on d

现在,经过必要的计算,我怎样才能得到一个double[][] 形式的d?用d.getData()我只能获取行的形式。我也尝试过包装SimpleMatrix,或从双打创建SimpleMatrix,但我没有找到任何方法(或矩阵格式)来检索双打!

你知道我该怎么做吗?或者您能否提出一个无需编写个性化函数的直接解决方法?

【问题讨论】:

  • 您是否尝试过在“d”上使用 DMatrixIterator?

标签: java matrix double ejml


【解决方案1】:

我对这个库不是很熟悉,但是考虑到矩阵是使用data[ y*numCols + x ] = data[y][x] 格式存储的,您可以编写自己的函数来使用相同的格式检索数据。

例子:。

import org.ejml.data.DMatrixRMaj;

public class Main {

    public static void main(String[] args) throws Exception {
        double [] [] doubles = new double[2][2];
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                doubles[i][j] = 0.1;
            }
        }

        //init a
        DMatrixRMaj d = new DMatrixRMaj(doubles);

        double [] [] doublesAfter = getInitMatrix(d);

        System.out.println("Initial matrix: ");
        printMatrix(doubles);

        System.out.println("Same matrix after DMatrixRMaj: ");
        printMatrix(doublesAfter);
    }

    private static double [][] getInitMatrix(DMatrixRMaj dMatrixRMaj) {
        double [] [] doubles = new double[dMatrixRMaj.getNumRows()][dMatrixRMaj.getNumCols()];
        for (int x = 0; x < dMatrixRMaj.getNumRows(); x++) {
            for (int y = 0; y <dMatrixRMaj.getNumCols(); y++) {
                doubles[x][y] = dMatrixRMaj.getData()[y*dMatrixRMaj.getNumCols() + x];
            }
        }
        return doubles;
    }

    private static void printMatrix(double [][] matrix) {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}

**Print result:**

//Initial matrix: 
0.1 0.1 
0.1 0.1 
//Same matrix after DMatrixRMaj: 
0.1 0.1 
0.1 0.1 

【讨论】:

  • Java 是一门很棒的语言,它被广泛使用是有原因的。您只需为正确的任务选择正确的工具...
  • 没有理由,但我认为 SO cmets 不是开始讨论的正确位置。
  • 是你开始的,不是我。无论如何,我再次查看了文档(您应该有吗?),甚至还有更简单的方法可以做到这一点。 DMatrixRMaj 类有方法 getNumCols()、getNumRows() 和 get(row, col)。简单的 2d 循环,您可以取回数据。
  • 我不会把自己写的函数称为“简单”。我称之为库中缺乏结构,而在 Java 中这是常态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
相关资源
最近更新 更多