2016-11-28 47 views
0

我在java中寫出了一個sigmoid函數,它在處理單個數字時工作正常,但是在第一個數據輸入之後給定數組失敗時。 這裏有一些數據來說明我的問題(輸出四捨五入爲3位數)。Java Sigmoid方法返回不正確的結果

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 

我的代碼如下。

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

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

如果這僅僅是我的一部分,請告訴我,因爲我一直在嘗試了幾個小時無果,並感謝任何響應都一個愚蠢明顯的監督。

回答

1

雖然Java是按值傳遞的,但傳遞給函數的值是對輸入數組的引用,而不是數組的副本,因此您的函數會修改陣列 - 您的println中的每個調用正在更新前一次調用的結果。

使數組的一個副本,以在返回結果:

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; 
}