我有一个Java方法fill0s((,它将一个较小的矩阵输入到一个较大的矩阵中,据说用0填充:
public class PoolingFunctions {
// Fill needed spaces with 0
public static Double[][] fill0s(Double[][] image, int filter_size){
int columns_remaining = filter_size - (image[0].length%filter_size);
int rows_remaining = filter_size - (image.length%filter_size);
// CREATE A MATRIX: HERE LIES THE PROBLEM: //////////////////////////////
Double [][] blank_matrix = new Double [(image.length)+columns_remaining][(image[0].length)+rows_remaining];
for (int i = 0; i<image.length; i++) {
for (int j = 0; j<image[i].length; j++) {
blank_matrix[i][j] = image[i][j];
}
}
return blank_matrix;
}
}
调用此方法后:
public class MainPooling{
public static void main(String[] args) {
Double[][] image = { {1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0},
{1.0,1.0,1.0,1.0}
};
Double[][] formatted_image;
formatted_image = PoolingFunctions.fill0s(image,3);
TestMatricesJava.print2dMatrix(formatted_image);
}
}
我得到以下结果:
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
1.0 1.0 1.0 1.0 null null
null null null null null null
null null null null null null
我的问题是:为什么该函数返回 null 而不是 0.0?
由于Double
是一个类,因此Double
数组的默认值是null
,而不是 0.0。
您需要使用基元类型double
或显式初始化矩阵。
Double 是一个包装类,如果未初始化,其值将为 null。使用基元类型双精度,它会给你一个正确的结果。