Lors de l'utilisation de nombres (pseudo) aléatoires dans Jython, serait-il plus efficace d'utiliser le module aléatoire Python ou la classe aléatoire de Java?Randomness in Jython
Répondre
la version de Python est beaucoup plus rapide dans un test simple sur mon Mac:
jython -m timeit -s "import random" "random.random()"
1000000 boucles, le meilleur de 3: 0,266 microseconde par boucle
vs
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
1000000 boucles, meilleur de 3: 1,65 usec par boucle
Jython version 2.5b3 et Java version 1.5.0_19.
temps, hein? Je dois me souvenir de celui-là !! +1 – richq
timeit est l'une de ces choses «piles incluses» python. Pas strictement nécessaire mais tellement agréable à avoir. –
La classe Random de Java utilise (et doit en effet utiliser les spécifications de Java) un algorithme congruential linéaire, tandis que Python utilise Mersenne Twister. Mersenne garantit une qualité extrêmement élevée (bien que non crypto qualité!) Nombres aléatoires et une période ridiculement longue (flotteurs de précision de 53 bits, période 2 ** 19937-1); Les générateurs congruentiels linéaires ont bien connu issues. Si vous ne vous souciez pas vraiment de la qualité des nombres aléatoires, et que vous vous souciez seulement de la vitesse, LCG devrait être plus rapide car il est moins sophistiqué.
En fait, selon certains anciens benchmarks que j'ai fait dans le langage de programmation D, le Mersenne Twister est plus rapide, bien qu'il utilise plus de mémoire. C'est parce que le twister Mersenne évite la division op que les besoins congruents linéaires. Les seules bonnes raisons d'utiliser la congruence linéaire sont les suivantes: si vous avez des contraintes de mémoire extrêmes ou si vous n'avez besoin que de quelques nombres aléatoires et que le temps nécessaire pour semer le générateur est un goulot d'étranglement. (La congruence linéaire a un espace d'état plus petit donc l'ensemencement est plus rapide.) – dsimcha
Où les LCG ont-ils besoin d'une division? La plupart des LCG utilisés quelque part utilisent une puissance de deux comme module (ce qui rend la recherche de paramètres appropriés plus difficile mais beaucoup plus rapide). – Joey
Java spécifie un module de exactement (2 ** 48) -1, et toute implémentation standard Java DOIT utiliser exactement cela, donc je ne vois pas ce que "la plupart des LCG utilisés quelque part" ont à faire avec le cas - java .Random a ses propres règles très précises. –
- 1. Jython, ImageInfo
- 2. DOM4J noeud Détacher, Jython
- 3. Remplacer le texte, Jython, Regex
- 4. Jython Spliting chaîne Up
- 5. Jython date de conversion
- 6. Bibliothèque d'archivage python (jython)
- 7. Classe Java de jython
- 8. Utilisation de Jython avec M2Eclipse
- 9. Classe imbriquée Jython et Java
- 10. Obtenir des propriétés d'image avec Jython
- 11. navigation du clavier Remap avec Jython/Swing
- 12. Gestion des événements avec Jython & Swing
- 13. Jython zxJDBC cursor.tables() renvoie toujours Aucun
- 14. Jython, requête de plusieurs colonnes dynamiquement
- 15. Importer à partir de lib jython externe
- 16. transformer la source de Jython/ast
- 17. Utilisation/Création d'objets Python avec Jython
- 18. Est-ce que Jython peut remplacer Java?
- 19. Problèmes avec inspect.py lors de l'utilisation de Jython
- 20. Jython: analyse du texte à virgule flottante contenant des virgules
- 21. Plug-in "in-line find" pour Visual Studio
- 22. Comment charger des fichiers jar pour le débogage dans Jython?
- 23. Template Lib (Moteur) en Python fonctionnant avec Jython
- 24. Y at-il un bon clone NumPy pour Jython?
- 25. Tri de la liste des URL par longueur en Jython
- 26. Gestion des événements de discussion Swing avec Jython
- 27. Contrôle de l'exécution d'un script Jython à partir de Java
- 28. Existe-t-il un plugin Eclipse intégré pour déboguer Jython?
- 29. Flash .Net tie-in
- 30. YearFrac in Sql 2005
Veuillez préciser ce que vous considérez comme «efficace». –
Avez-vous essayé de mesurer le temps requis pour chacun? –