Al usar números (pseudo) aleatorios en Jython, ¿sería más eficiente usar el módulo aleatorio de Python o la clase aleatoria de Java?Aleatoriedad en Jython
Respuesta
la versión de Python es mucho más rápido en una prueba sencilla en mi Mac:
jython -m timeit -s "import random" "random.random()"
1.000.000 bucles, mejor de 3: 0,266 USEC por lazo
vs
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
1000000 bucles, lo mejor de 3: 1.65 usec por ciclo
Jython versión 2.5b3 y Java versión 1.5.0_19.
timeit, ¿eh? Debo recordar eso !! +1 – richq
timeit es una de esas cosas de 'baterías incluidas' de python. No es estrictamente necesario, pero es muy bueno tenerlo. –
La clase Random de Java usa (y de hecho debe usar las especificaciones de Java) un algoritmo congruente lineal, mientras que Python usa Mersenne Twister. Mersenne garantiza una calidad extremadamente alta (aunque no crypto quality!) Números aleatorios y un período ridículamente largo (flotadores de precisión de 53 bits, período 2 ** 19937-1); Los generadores congruenciales lineales tienen el conocido issues. Si realmente no te importa la calidad de los números aleatorios, y solo te importa la velocidad, es probable que LCG sea más rápido exactamente porque es menos sofisticado.
En realidad, según algunos puntos de referencia anteriores que hice en el lenguaje de programación D, el Mersenne Twister es más rápido, aunque usa más memoria. Esto se debe a que el tornado de Mersenne evita la división de las necesidades congruentes lineales. Las únicas buenas razones para usar congruencia lineal son si tiene limitaciones extremas de memoria o si solo necesita unos pocos números aleatorios y el tiempo que lleva generar el generador es un cuello de botella. (Linear congruente tiene un espacio de estado más pequeño para que la siembra sea más rápida). – dsimcha
¿Dónde los LCG necesitan una división? La mayoría de los LCG que se utilizan en algún lugar usan una potencia de dos como su módulo (lo que hace que encontrar parámetros adecuados sea más difícil, pero es considerablemente más rápido). – Joey
Java especifica un módulo de exactamente (2 ** 48) -1, y todas las implementaciones estándar de Java DEBEN usar exactamente eso, así que no veo qué tienen que ver "la mayoría de los LCG que se usan en algún lado" con el caso - java .Random tiene sus propias reglas muy precisas. –
- 1. Crear byte [] en Jython
- 2. jython syntaxerror?
- 3. jython multithreading
- 4. Python/jython coexistiendo en virtualenv
- 5. Instalación de Jython en Ubuntu
- 6. Renombrar archivos, Python/Jython
- 7. ¿Usando Jython con Django?
- 8. ¿Cómo se logra la aleatoriedad con Math.random en javascript?
- 9. Mejorar la calidad de aleatoriedad en Objective-C
- 10. Cómo probar la aleatoriedad (caso en punto - Mezclar)
- 11. ¿Uso de aleatoriedad y/o iteraciones en pruebas unitarias?
- 12. ¿Hay problemas para desarrollar Django en Jython?
- 13. Ejecutar Jython y Python en un archivo
- 14. Desarrollo de Jython en Google App Engine
- 15. Soporte de Jython en los editores?
- 16. Programando aplicaciones de Android en jython
- 17. Importación de módulos de python en jython
- 18. Aplicaciones de Jython en el mundo real
- 19. ejecutando bytecode jython usando java
- 20. Controlando stdout/stderr desde Jython
- 21. Uso de Jython con M2Eclipse
- 22. fast-ish python/jython IPC?
- 23. Interoperabilidad de Scala y Jython
- 24. Uso de ctypes con jython
- 25. ¿Cómo evitar que el algoritmo de aleatoriedad se "atasque"?
- 26. ¿Por qué necesita mucha aleatoriedad para una encriptación efectiva?
- 27. Invocar Jython desde Python (o viceversa)
- 28. Groovy ventajas sobre Jython o Jruby?
- 29. ¿Puedo extender Jenkins con Jython/Python
- 30. ¿Es posible usar SWT desde Jython?
Por favor, elabore lo que considere "eficiente". –
¿Has probado medir el tiempo requerido para cada uno? –