二维数组的归一化

Normalization of 2D array

我有一个尺寸为 365x28 的二维矩阵(即 365 行和 28 列)。我正在尝试使用以下代码对此进行规范化:

public static void main(String args[]) throws Exception {
    double[][] X = new double [365][28];
    double[][] X_min = new double [1][28];
    double[][] X_max = new double [1][28];

    double[][] X_norm = null;

    X_norm = normalize(X, X_min, X_max);// error in this line

public static double[][] normalize(double[][] ip_matrix, double[][] min_bound, double[][] max_bound)
{

    double[][] mat1 = ip_matrix;

    double[][] norm = new double[mat1.length][mat1[0].length];

    for (int i = 0; i < mat1.length; i++)
    {
        for (int j = 0; j <= mat1[i].length; j++)
        {
                norm[i][j] = (mat1[i][j] - min_bound[i][j] / (max_bound[i][j] - min_bound[i][j]));// error in this line
        }
    }

    return norm;

}           
}

但是当我 运行 这时我得到一个索引错误。我知道 min_bound[i][j] 和 max_bound[i][j] 有问题。但我不知道如何纠正这个问题。谁能帮我解决这个问题?提前致谢。

Error: exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
for (int i = 0; i < mat1.length; i++)

我去365你打

norm[i][j] = (mat1[i][j] - min_bound[i][j] / (max_bound[i][j] - min_bound[i][j]));

其中 min_bound 是 1x28

因此,您得到 indexoutofbounds 异常

好吧,如果你仔细想想,你的问题就很明显了。记住数组从 0 开始索引。 因此,在使用 var int "i" 的第一个 for 循环中规范化的方法中,它上升到 365,因为您检查二维数组 X 的长度,其中 min_bound 和 max_bound 只有大小为 1 和 28。Think

假设 min_bound 和 max_bound 总是 [1][(some value)]

for (int i = 0; i < mat1.length - 1; i++) {
            for (int j = 0; j <= mat1[i].length - 1; j++) {
                norm[i][j] = (mat1[i][j] - min_bound[0][j]
                        / (max_bound[0][j] - min_bound[0][j]));// error in this
                // line
            }
        }