Как я могу изменить индекс матрицы со значениями массивов? - PullRequest
2 голосов
/ 08 марта 2020

Я импортирую некоторые значения из matlab в коде java (Eclipse). Я хочу изменить индекс матрицы со списками, которые у меня есть в java. Как я могу это сделать?

'' '

public class ConMat {

 public static void main(String[] args) throws Exception {

        int n = 2;// number of requests
        int K=2;
        int F=2*n;
        int N=2*n;

        LinkedList<Integer> Origin = new LinkedList<Integer>();
        Origin.add(0,1);
        Origin.add(1,2);
        Origin.add(2,3);

        LinkedList<Integer> Dest = new LinkedList<Integer>();
        Dest.add(0,2);
        Dest.add(1,3);
        Dest.add(2,1);


        LinkedList<Integer> U = new LinkedList<Integer>();
        U.addAll(Origin);
        U.addAll(Dest);

        LinkedList<Integer> Z = new LinkedList<Integer>();
         Z.addAll(Origin);
         Z.addAll(Dest);
       //  Z.add(4,0);
        // Z.add(5,5);


     MatlabEngine eng1 = MatlabEngine.startMatlab();
    eng1.eval("addpath('.\\MATLAB\\Dial')");
    int D=3;
    double[][] OD_incr=new double[D][D] ;
    double[][]odmatrix=new double[D][D];
    double [] origins= {1,2,3};
    double [] destinations= {2,3,1};
    double []scaling= {2};
    double[][]roots = eng1.feval("Dial_java",OD_incr,origins,destinations,scaling);



  System.out.println(Arrays.deepToString(roots));

Я получаю это:

 [[0.5, 0.4791428571428572, 0.0], [0.0, Infinity, Infinity], [0.4791428571428572, 0.0, Infinity]]

Я хочу создать матрицу с этими значениями и индексом равно Origin и Dest.

Например:

  double[][] c = new double[][];
  for( int i:Origin){
    for(int j:Dest){
     c[i][j]=roots[i][j];
     }
      }

Как я могу это сделать?

1 Ответ

1 голос
/ 08 марта 2020

Я не совсем уверен, что понимаю. Но матрицы в Java основаны на 0. Поэтому вам необходимо вычесть единицу из индекса матрицы Matlab.

Попробуйте это. Я не уверен, как вы хотите применить Origin и Dest.

         int D = 3;
         double[][] c = new double[D][D];
         for( int i= 0; i < D; i++){
              for (int j = 0; j < D; j++) {
                 c[Dest.get(i)-1][Dest.get(j)-1]
                    =roots[Origin.get(i)-1][Origin.get(j)-1];
              }
         }

         System.out.println(Arrays.deepToString(c));

Вот пример того, что я делал, чтобы вы могли применить эту технику самостоятельно. Посмотри, делает ли это то, что ты хочешь. Он использует образцы данных из вашего поста, так как у меня нет MatLab.


        int D = 3;
        double roots[][] = { { 0.5, 0.4791428571428572, 0.0 },
                {0.0,Double.POSITIVE_INFINITY,Double.POSITIVE_INFINITY},
                { 0.4791428571428572, 0.0, Double.POSITIVE_INFINITY, } };

        System.out.println("Before copying");
        for (double[] a : roots) {
            System.out.println(Arrays.toString(a));
        }

        double[][] c = new double[D][D];
        for (int i = 0; i < D; i++) {
            for (int j = 0; j < D; j++) {
                c[Dest.get(i)-1][Dest.get(j)-1] = roots[Origin.get(i)-1] 
                          [Origin.get(j)-1]; 
            }
        }

        System.out.println("\nAfter copying");
        for (double[] a : c) {
            System.out.println(Arrays.toString(a));
        }


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...