2D阵列的Sigmoid函数

时间:2015-11-09 15:04:55

标签: java arrays vectorization

有没有办法在不使用像JAMA这样的外部库的情况下找到2D数组的sigmoid? 我尝试了以下代码,但失败了。

public static double[][] sigmoid(double[][] x, boolean deriv){
    for (int i = 0; i <x.length ; i++)
    {
        for (int j = 0; j < x[1].length; j++){
            if(deriv == false){
                return sigmoid(x[i][j], false) * (1 - sigmoid(x[i][j], false));
            }
            return (1/(1 + Math.pow(Math.E, (-1 * x[i][j]))));
        }
    }
}

它说,不能将double转换为double [] []。任何解决这个问题的方法都将受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

这是对数组x的元素方式sigmoid操作的函数:

public static double sigmoid(double t) {
    return 1 / (1 + Math.pow(Math.E, (-1 * t)));
}

public static double[][] sigmoid(double[][] x, boolean deriv) {
    double[][] = result = new double[x.length][x[0].length];

    for (int i = 0; i < x.length; i++) {
        for (int j = 0; j < x[i].length; j++) {
            double sigmoidCell = sigmoid(x[i][j]);

            if (deriv == true) {
                result[i][j] = sigmoidCell * (1 - sigmoidCell);
            } else {
                result[i][j] = sigmoidCell;
            }
        }
    }

    return result;
}

在您的方法中,存在一些语法错误,以及一个永远不会结束的递归语句,因为deriv总是为false。此外,递归语句计算一个double,而不返回任何2d数组。

如果你做的不止这些,我建议你创建减法,点乘和创建矩阵的方法。