Używając (pseudo) losowych liczb w Jythonie, czy bardziej efektywne byłoby użycie losowego modułu Pythona lub losowej klasy Javy?Losowość w Jythonie
Odpowiedz
wersja Pythona jest znacznie szybszy w prostym teście na moim Mac:
jython -m timeit -s "import random" "random.random()"
1000000 pętli, najlepiej 3: 0,266 usec za pętlą
vs
jython -m timeit -s "import java.util.Random; random=java.util.Random()" "random.nextDouble()"
1000000 pętli, najlepiej z 3: 1.65 użycie w pętli
Jython wersja 2.5b3 i Java wersja 1.5.0_19.
timeit, co nie? Muszę to zapamiętać !! +1 – richq
timeit to jedna z tych rzeczy "w bateriach". Nie jest to bezwzględnie konieczne, ale bardzo przyjemne. –
Jawna klasa losowa używa (i rzeczywiście musi używać specyfikacji Javy) liniowy algorytm kongruencji, podczas gdy Python używa Mersenne Twister. Mersenne gwarantuje ekstremalnie wysoką jakość (choć nie jest to jakość: crypto!) Liczb losowych i absurdalnie długi okres (53-bitowe precyzyjne pływaki, okres 2 ** 19937-1); Generatory liniowe kongruencji mają dobrze znany issues. Jeśli nie zależy ci na jakości liczb losowych i zależy tylko od prędkości, LCG będzie prawdopodobnie szybsze właśnie dlatego, że jest mniej wyrafinowane.
W rzeczywistości, według niektórych starych testów, które zrobiłem w języku programowania D, Mersenne Twister jest szybszy, chociaż zużywa więcej pamięci. Dzieje się tak dlatego, że tornado Mersenne unika podziału na liniowe potrzeby kongregacji. Jedynym dobrym powodem do zastosowania konwencji liniowej są ekstremalne ograniczenia pamięci lub jeśli potrzebujesz tylko kilku liczb losowych, a czas potrzebny do zaszczepienia generatora jest wąskim gardłem. (Liniowy kongruencja ma mniejszą przestrzeń stanów, więc obsiewanie jest szybsze.) – dsimcha
Gdzie LCG potrzebują podziału? Większość LCG, które są używane gdzieś, używa mocy dwóch jako ich modułu (co sprawia, że znalezienie odpowiednich parametrów jest trudniejsze, ale jest znacznie szybsze). – Joey
Java określa moduł dokładnie (2 ** 48) -1, a cała standardowa implementacja Java MUSI użyć dokładnie tego, więc nie widzę co "większość LCG, które są gdzieś używane" ma do czynienia z przypadkiem - java .Random ma swoje bardzo dokładne zasady. –
- 1. Losowość w Pythonie
- 2. przy użyciu wyliczenia w jythonie
- 3. Co Wyjątek: Losowość skrótu łańcucha znaków powinna być wyłączona za pomocą PYTHONHASHSEED w pyspark?
- 4. Czy znasz jakieś dynamiczne narzędzie do instrumentacji dla Androida z obsługą wielu urządzeń (najlepiej w Pythonie lub Jythonie)?
- 5. Aplikacja w stylu administratora Django dla Javy
- 6. Czy ktoś użył gofry do budowania aplikacji Java?
- 7. GUIDy w C++ Linux GCC app
- 8. Czy generator GUID Microsoftu jest kryptograficznie bezpieczny?
- 9. Algorytm przełączania ikon w systemie iOS
- 10. Generowanie liczb losowych bez użycia operacji bitowych
- 11. Jak uzyskać losowe wyniki z Microsoft Z3?
- 12. Testowanie tasownika talii kart
- 13. przekazywanie danych między java i pytonem
- 14. Generowanie liczb losowych w aplikacjach MVC
- 15. Jak tłumić ostrzeżenia valgrind przez pochodzenie niezainicjowanych wartości?
- 16. VS nie rozpoznaje zależności projektu
- 17. Losowa ścieżka przez prostokąt
- 18. Tableview reloadData vs. beginUpdates & endUpdates
- 19. W tym hashe w hashe w Perlu
- 20. Skojarzenie "w" w Pythonie?
- 21. Coffeescript. w/w pętli
- 22. Negacja% w% w R
- 23. Klauzula "w" w anormie?
- 24. Obróć ciało w JS, w lewo w prawo i w prawo w lewo
- 25. Intellisense w App_Code w VS2010
- 26. RegEx: \ w - "_" + "-" w UTF-8
- 27. PageIndexChanging w GridView w ASP.NET
- 28. Sesje w subdomenach w Express
- 29. Udostępnianie w Whatsapp w AngularJS
- 30. Błąd: nieoczekiwane "}" w "}" w R
Proszę wyjaśnić, co uważasz za "skuteczne". –
Czy próbowałeś mierzyć czas wymagany do każdego? –