2012-02-21 29 views
5

Estoy creando una red neuronal en Java y necesito crear un método para generar pesos aleatorios inicialmente.Obtener un valor doble aleatorio entre -1 y 1

Necesito crear una función que devuelva un valor doble aleatorio entre -1 y 1 pero no estoy seguro de la lógica para hacerlo así que cualquier ayuda sería muy apreciada.

+1

¿Lo quiere incluido o exclusivo en los extremos de la gama? ¿O diferente en ambos extremos? Siempre debe especificar eso cuando está hablando de rangos. Las respuestas que tiene hasta la fecha incluyen -1 pero excluyen 1. – paxdiablo

+0

... porque Math.random() devuelve un valor doble con un signo positivo, * mayor o igual * a 0.0 y * menor que * 1.0. Que no sabía hasta hace unos 30 segundos ... – DNA

+0

@pax Cuando se trata de un intervalo real, los puntos finales [casi seguramente] (http://en.wikipedia.org/wiki/Almost_surely) nunca serán recogidos de todos modos . Cuando se trata de intervalos de punto flotante, la probabilidad de seleccionar aleatoriamente un punto final es solo un poco mayor. –

Respuesta

7

Math.random() le dará un doble aleatorio entre 0 y 1. Se puede multiplicar ese resultado por 2 y restar 1 para un doble al azar entre -1 y 1.

Alternativamente se puede aplicar la misma transformación a una llamada al método nextDouble() desde java.util.Random, pero esto requiere una instancia explícita de Random mientras que eso se hace detrás de las escenas con Math.random().

9

Puede utilizar el método nextDouble() de la clase Random.

Random rng = new Random(); 
// to get a double between -1 and 1 
return rng.nextDouble() * 2 - 1; // rng.nextDouble() is between 0 and 1 
Cuestiones relacionadas