DMatrixRMaj: получить данные в матричной форме - PullRequest
0 голосов
/ 10 мая 2018

Когда я инициализирую новый DMatrixRMaj в ejml (стандартный формат для реальной матрицы), он может хранить внутреннюю матрицу double[][].Пример

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

Теперь, после необходимых вычислений, как я могу получить обратно double[][] форму d?С d.getData() я могу получить только форму строки.Я также пытался обернуть в SimpleMatrix или создать SimpleMatrix из двойных чисел, но я не нашел никаких методов (или матричного формата) для извлечения двойных чисел!

Знаете ли вы, как я могусделай это?Или вы можете предложить обходной путь без необходимости написания персонализированной функции?

1 Ответ

0 голосов
/ 10 мая 2018

Я не очень знаком с библиотекой, но, учитывая, что матрица хранится в формате 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 
...