如何在Java中从二维整数数组转换二维双数组



我正在尝试创建一个实用程序函数,从整数的二维数组中创建一个二重数组(它是从deeplearning4j的KerasTokenizer的textsToSequences(String[]text(方法创建的(。我创建了下面的方法,但在第111行继续获得NullPointerExceptions(doubles[i][j] = list.get(j);(。如何更改我的方法或创建一个新方法来解决此问题?

public static double[][] integerToDoubleArray(Integer[][] integers) {
double[][] doubles = new double[integers.length][];
for (int i = 0; i < integers.length; i++) {
List<Integer> list = Arrays.asList(integers[i]);
for (int j = 0; j < list.size(); j++) {
doubles[i][j] = list.get(j);
}
}
return doubles;
}

我使用以下方法和以下API调用它:https://deeplearning4j.org/api/latest/org/deeplearning4j/nn/modelimport/keras/preprocessing/text/KerasTokenizer.html#textsToSequences-java.lang.String:A

private static double[][] encodeSequences(KerasTokenizer tokenizer, int length, ArrayList<String> sentences) {
return integerToDoubleArray(tokenizer.textsToSequences(arraylistToArray(sentences)));
}

您没有指定doubles的第二个维度(它是一个双数组的数组(,也没有初始化它的每个元素,所以您得到了这个异常。只需将每一行初始化为一个新的双数组,该数组的长度为该索引处的整数数组的长度。

public static double[][] integerToDoubleArray(Integer[][] integers) {
double[][] doubles = new double[integers.length][];
for (int i = 0; i < integers.length; i++) {
doubles[i] = new double[integers[i].length];
List<Integer> list = Arrays.asList(integers[i]);
System.out.println(list);
for (int j = 0; j < list.size(); j++) {
doubles[i][j] = list.get(j);
}
}
return doubles;
}

需要注意的是,您不需要将二维Integer数组的每一行转换为List,因为您可以简单地使用integers[i][j]访问i行和j列的元素。演示

public static double[][] integerToDoubleArray(Integer[][] integers) {
double[][] doubles = new double[integers.length][];
for (int i = 0; i < integers.length; i++) {
doubles[i] = new double[integers[i].length];
for (int j = 0; j < integers[i].length; j++) {
doubles[i][j] = integers[i][j];
}
}
return doubles;
}

这可以解决您的问题。我看不出有任何理由在转换过程中使用ArrayList。

public static double[][] integerToDoubleArray(Integer[][] integers) {

//TODO: return empty double[][] array if integers 2-D array is empty

double[][] doubles = new double[integers.length][integers[0].length];
for (int i = 0; i < integers.length; i++) {
for (int j = 0; j < integers[0].length; j++) {
doubles[i][j] = integers[i][j];
}
}
return doubles;
}

最新更新