如何将原始双精度数组转换为双精度数组

时间:2018-07-10 19:48:56

标签: java arrays double

借助Apache通用数学库,我得到了原始的double数组。

  RealMatrix pInverse = new LUDecomposition(p).getSolver().getInverse();

  double[][] temp = pInverse.getData();

我需要将温度转换为Double[][]

  Double[][] inverse = new Double[][]temp;

3 个答案:

答案 0 :(得分:12)

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

Double[][] inverse = Arrays.stream(temp)
        .map(d -> Arrays.stream(d).boxed().toArray(Double[]::new))
        .toArray(Double[][]::new);

答案 1 :(得分:7)

由于您已经在使用 Apache Commons ,可能值得指出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);

答案 2 :(得分:6)

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

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];