【问题标题】:How can i change the index of a matrix with values of arraylists?如何使用数组列表的值更改矩阵的索引?
【发布时间】:2020-06-20 19:07:48
【问题描述】:

我在 java 代码 (Eclipse) 中从 matlab 导入一些值。 我想用我在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];
     }
      }

我该怎么做?

【问题讨论】:

    标签: java arrays arraylist indexing


    【解决方案1】:

    我不太确定我是否理解。但是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));
            }
    
    
    

    【讨论】:

    • 感谢您的帮助,但它不起作用。对不起。我是初学者。
    • 用你的代码我得到这个:[[0.0, Infinity, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0], [0.0, 0.0 , 0.0, 0.0]]
    • 当你打印出roots时会是什么样子?
    • [[0.5, 0.4791428571428572, 0.0], [0.0, Infinity, Infinity], [0.4791428571428572, 0.0, Infinity]]
    • 我会用这些值创建一个新矩阵,但我想使用 Origin 和 Dest 作为索引。
    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 2011-10-18
    相关资源
    最近更新 更多