2016-11-28 4 views
0

単一の数値を扱うときにうまく動作するが、最初のデータ入力後に配列が失敗したときにうまく動作するsigmoid関数をJavaで書きました。 問題を説明するためのデータがあります(出力は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; 
} 
関連する問題