2012-02-21 15 views
5

Tworzę sieć neuronową w Javie i muszę najpierw utworzyć metodę generowania losowych wag.Uzyskiwanie losowej podwójnej wartości między -1 a 1

Potrzebuję utworzyć funkcję, która zwraca losową podwójną wartość między -1 i 1, ale nie jestem pewien logiki, aby to zrobić, więc jakakolwiek pomoc byłaby najbardziej ceniona.

+1

Czy chcesz go włączyć lub wyłączyć na końcu zakresu? Lub różne na obu końcach? Powinieneś zawsze to określać, gdy mówisz o zakresach. Odpowiedzi trzeba dacie obejmują -1 jednak wykluczyć 1. – paxdiablo

+0

... bo Math.random() zwraca podwójną wartość ze znakiem dodatnim, * większy lub równy * 0.0 * i * mniej niż 1,0. Który nie wiedziałem aż do około 30 sekund temu ... – DNA

+0

@pax Gdy mamy do czynienia z prawdziwym przedziale, punkty końcowe będzie [prawie na pewno] (http://en.wikipedia.org/wiki/Almost_surely) nigdy być zbierane w każdym razie . Gdy zamiast zajmować się interwałami zmiennoprzecinkowymi, prawdopodobieństwo losowego wyboru punktu końcowego jest tylko nieznacznie wyższe. –

Odpowiedz

7

Math.random() daje losową dublet między 0 i 1. Można pomnożyć wynik przez 2 i odjąć 1 random podwójne pomiędzy -1 a 1.

Alternatywnie można zastosować tę samą transformację do rozmowy do metody nextDouble() z java.util.Random, ale wymaga to jawnego wystąpienia Random, podczas gdy odbywa się to za kulisami z Math.random().

9

Możesz użyć metody nextDouble() klasy .

Random rng = new Random(); 
// to get a double between -1 and 1 
return rng.nextDouble() * 2 - 1; // rng.nextDouble() is between 0 and 1 
Powiązane problemy