Liczby losowe mogą być generowane przy użyciu funkcji random(), uniform(), randange() i randint() w module random standardowej biblioteki Pythona.
Moduł random jest zawarty w standardowej bibliotece, więc nie jest wymagana żadna dodatkowa instalacja. Oczywiście, musisz go zaimportować.
Podane są tu następujące informacje.
random.random()
(Liczba zmiennoprzecinkowa z przedziału od 0,0 do 1,0)random.uniform()
(Dowolny zakres liczb zmiennoprzecinkowych)- Generowanie liczb losowych, które mają rozkład normalny, gaussowski itp.
random.randrange()
(Liczba całkowita o dowolnym zakresie i kroku)random.randint()
(Liczba całkowita w dowolnym zakresie)- Generowanie listy z liczbami losowymi jako elementami
- Lista losowych liczb zmiennoprzecinkowych
- Lista liczb losowych całkowitych
- Inicjalizacja generatora liczb losowych (ustalenie ziarna liczb losowych)
Zobacz poniższy artykuł o tym, jak losowo wyodrębnić lub posortować elementy listy.
- Powiązane artykuły:Wybieranie losowych elementów z listy w Pythonie przy użyciu choice(), sample(), choices()
- random.random() (Liczba zmiennoprzecinkowa z przedziału od 0,0 do 1,0)
- random.uniform() (Dowolny zakres liczb zmiennoprzecinkowych)
- Generowanie liczb losowych, które mają rozkład normalny, gaussowski itp.
- random.randrange() (Liczba całkowita o dowolnym zakresie i kroku)
- random.randint() (Liczba całkowita w dowolnym zakresie)
- Generowanie listy z liczbami losowymi jako elementami
- Inicjalizacja generatora liczb losowych (ustalenie ziarna liczb losowych)
random.random() (Liczba zmiennoprzecinkowa z przedziału od 0,0 do 1,0)
Funkcja random() modułu random generuje losową liczbę zmiennoprzecinkową typu float, która znajduje się w przedziale od 0.0 do 1.0.
import random
print(random.random())
# 0.4496839011176701
random.uniform() (Dowolny zakres liczb zmiennoprzecinkowych)
uniform(a, b)
Funkcje tego modułu generują liczby losowe typu zmiennoprzecinkowego float w dowolnym z poniższych zakresów
a <= n <= b
b <= n <= a
import random
print(random.uniform(100, 200))
# 175.26585048238275
Dwa argumenty mogą być albo większe albo mniejsze; jeśli są równe, to naturalnie zwrócą tylko tę wartość. Wartością zwracaną jest zawsze liczba zmiennoprzecinkowa (float).
print(random.uniform(100, -100))
# -27.82338731501028
print(random.uniform(100, 100))
# 100.0
Argument może być również podany jako float.
print(random.uniform(1.234, 5.637))
# 2.606743596829249
To, czy wartość b jest zawarta w przedziale, zależy od następujących zaokrągleń, zgodnie z dokumentacją.a + (b-a) * random.random()
To, czy wartość punktu końcowego b jest w zakresie, czy nie, zależy od zaokrąglenia zmiennoprzecinkowego w następującym równaniu
a + (b-a) * random()
random.uniform() — Generate pseudo-random numbers — Python 3.10.2 Documentation
Generowanie liczb losowych, które mają rozkład normalny, gaussowski itp.
Funkcje random() i uniform() powyżej generują równomiernie rozłożone liczby losowe, ale istnieją również funkcje do generowania liczb zmiennoprzecinkowych, które podążają za następującym rozkładem.
- rozkład beta:
random.betavariate()
- rozkład wykładniczy:
random.expovariate()
- rozkład gamma:
random.gammavariate()
- Rozkład gaussowski:
random.gauss()
- rozkład lognormalny:
random.lognormvariate()
- rozkład normalny:
random.normalvariate()
- Rozkład Von Misesa:
random.vonmisesvariate()
- Rozkład Pareto:
random.paretovariate()
- Rozkład Weibulla:
random.weibullvariate()
Parametry każdej dystrybucji są określane przez argumenty. Zobacz oficjalną dokumentację dla szczegółów.
random.randrange() (Liczba całkowita o dowolnym zakresie i kroku)
randrange(start, stop, step)
Funkcja tego modułu losowego zwraca losowo wybrany element z następujących elementów.range(start, stop, step)
Podobnie jak w przypadku range(), argumenty start i krok mogą być pominięte. Jeśli je pominięto, to start=0 i krok=1.
import random
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(random.randrange(10))
# 5
Argument krok może być ustawiony na generowanie parzystej lub nieparzystej liczby losowej, lub liczby losowej będącej wielokrotnością trzech.
Na przykład, jeśli początek jest parzysty, a krok=2, to tylko parzyste liczby całkowite w zakresie mogą być otrzymane losowo.
print(list(range(10, 20, 2)))
# [10, 12, 14, 16, 18]
print(random.randrange(10, 20, 2))
# 18
random.randint() (Liczba całkowita w dowolnym zakresie)
randint(a, b)
Funkcja tego modułu losowego zwraca następującą losową liczbę całkowitą int.a <= n <= b
randrange(a, b + 1)
Równoważne temu; zauważ, że wartość b jest również zawarta w zakresie.
print(random.randint(50, 100))
# print(random.randrange(50, 101))
# 74
Generowanie listy z liczbami losowymi jako elementami
W tym rozdziale wyjaśnimy, jak użyć modułu random biblioteki standardowej do wygenerowania listy z liczbami losowymi jako elementami.
Lista liczb losowych o zmiennoprzecinkowych wartościach zmiennoprzecinkowych
Aby wygenerować listę, której elementy są zmiennoprzecinkowymi liczbami losowymi, połącz funkcje random() i uniform() z notacją zrozumienia listy.
import random
print([random.random() for i in range(5)])
# [0.5518201298350598, 0.3476911314933616, 0.8463426180468342, 0.8949046353303931, 0.40822657702632625]
W powyższym przykładzie, użyto range(), ale listy i tuple są również możliwe dla pożądanej liczby elementów. Aby uzyskać więcej szczegółów na temat list comprehensions, proszę zapoznać się z poniższym artykułem.
- Powiązane artykuły:Używanie notacji listy Pythona
Lista liczb losowych typu integer int
Podczas generowania listy, której elementy są liczbami losowymi całkowitymi, połączenie powyższych funkcji randange() i randint() z notacją list comprehension może skutkować zduplikowanymi wartościami.
print([random.randint(0, 10) for i in range(5)])
# [8, 5, 7, 10, 7]
Jeśli chcesz stworzyć losową sekwencję liczb całkowitych bez duplikatów, wyodrębnij elementy funkcji range() z arbitralnym zakresem używając random.sample().
print(random.sample(range(10), k=5))
# [6, 4, 3, 7, 5]
print(random.sample(range(100, 200, 10), k=5))
# [130, 190, 140, 150, 170]
Więcej informacji na temat funkcji random.sample() znajdziesz w poniższym artykule.
- Powiązane artykuły:Wybieranie losowych elementów z listy w Pythonie przy użyciu choice(), sample(), choices()
Inicjalizacja generatora liczb losowych (ustalenie ziarna liczb losowych)
Przez podanie dowolnej liczby całkowitej do funkcji seed() modułu random, ziarno liczb losowych może zostać ustalone i generator liczb losowych może zostać zainicjalizowany.
Po inicjalizacji z tym samym ziarnem, wartość losowa jest zawsze generowana w ten sam sposób.
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025
random.seed(0)
print(random.random())
# 0.8444218515250481
print(random.random())
# 0.7579544029403025