为什么创建空白矩阵会返回null而不是0.0?

时间:2017-07-06 14:58:43

标签: java matrix null conv-neural-network convolution

我有一个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?

2 个答案:

答案 0 :(得分:8)

由于Double是一个类,因此Double数组的默认值为null,而不是0.0。

您需要使用基元类型double或明确初始化矩阵。

答案 1 :(得分:1)

Double是一个包装类,如果没有初始化,它的值将为null。使用原始类型double,它会给你一个正确的结果。