代码之家  ›  专栏  ›  技术社区  ›  DCR

如何将基元双数组转换为双数组

  •  0
  • DCR  · 技术社区  · 7 年前

    通过Apache公共数学库,我得到了一个原始的双数组。

      RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();
    
      double[][] temp = pInverse.getData();
    

    我需要把温度转换成 Double[][]

      Double[][] inverse = new Double[][]temp;
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Andreas dfa    7 年前

    这是一组简单的嵌套循环:

    Double[][] inverse = new Double[temp.length][];
    for (int i = 0; i < temp.length; i++) {
        inverse[i] = new Double[temp[i].length];
        for (int j = 0; j < temp[i].length; j++)
            inverse[i][j] = temp[i][j];
    }
    

    如果你知道所有子数组的大小都相同,那么它就更短了:

    Double[][] inverse = new Double[temp.length][temp[0].length];
    for (int i = 0; i < temp.length; i++)
        for (int j = 0; j < temp[0].length; j++)
            inverse[i][j] = temp[i][j];
    
        2
  •  12
  •   Youcef LAIDANI    7 年前

    如果您使用的是Java 8 +,您可以使用:

    Double[][] inverse = Arrays.stream(temp)
            .map(d -> Arrays.stream(d).boxed().toArray(Double[]::new))
            .toArray(Double[][]::new);
    
        3
  •  7
  •   Youcef LAIDANI    7 年前

    因为你已经在使用 阿帕奇公地 ,可能值得指出 ArrayUtils.toObject

    将基元双精度数组转换为对象。

    用它,你可以写 Andreas first solution 作为

    Double[][] inverse = new Double[temp.length][];
    for (int i = 0; i < temp.length; i++) {
        inverse[i] =  ArrayUtils.toObject(temp[i]);
    }
    

    YCF_L's solution 作为

    Double[][] inverse = Arrays.stream(temp)
        .map(ArrayUtils::toObject)
        .toArray(Double[][]::new);