简体   繁体   中英

Java Sigmoid method returns Incorrect Results

I wrote out a sigmoid function in java that works fine when dealing with single numbers but when given an array fails after the first data entry. Here's some data to Illustrate my problem (with output rounded to 3 digits).

    Input | Correct Output | Output
        0 |       0.5      | 0.5
     -1,0 |    0.27,0.5    | 0.27,0.62
   1,0,-1 |  0.73,0.5,0.27 | 0.73,0.62,0.64

My code is as follows.

double[] data = { 1, 0, -1 };
System.out.println(sigmoid(data)[0] + "," + sigmoid(data)[1] + "," + sigmoid(data)[2]);

and

double[] sigmoid(double[] data) {
    for (int i = 0; i < data.length; i++)
        data[i] = 1 / (1 + Math.exp(-data[i]));
    return data;
}

If this is just a stupidly obvious oversight on my part please tell me as I have been trying for hours to no avail, and thanks for any responses at all.

While Java is pass by value, the value being passed to your function is a reference to the input array, not a copy of the array, so your function modifies the array in place - each call in your println is updating the results from the previous call.

Make a copy of the array to return your results in:

static double[] sigmoid(double[] data) {
    double[] z = Arrays.copyOf(data, data.length);
    for (int i = 0; i < z.length; i++)
        z[i] = 1 / (1 + Math.exp(-z[i]));
    return z;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM