Рубрики
Без рубрики

Модуль Python random – Генерация случайных чисел/Последовательностей

Эта статья посвящена модулю random в Python, который используется для генерации псевдослучайных чисел для различных вероятностных распределений.

Автор оригинала: Pankaj Kumar.

Эта статья посвящена модулю random в Python, который используется для генерации псевдослучайных чисел для различных вероятностных распределений.

Методы случайных модулей Python

1. семена()

Это инициализирует генератор случайных чисел. Чтобы сгенерировать новую случайную последовательность, необходимо установить начальное значение в зависимости от текущего системного времени. random.seed() задает начальное значение для генерации случайных чисел.

2. getstate()

Это возвращает объект, содержащий текущее состояние генератора. Чтобы восстановить состояние, передайте объект в set state() .

3. setstate(state_obj)

Это восстанавливает состояние генератора в момент вызова getstate () , передавая объект состояния.

4. getrandbits(k)

Это возвращает целое число Python с k случайными битами. Это полезно для таких методов, как randrange() для обработки произвольных больших диапазонов для генерации случайных чисел.

>>> import random
>>> random.getrandbits(100) # Get a random integer having 100 bits
802952130840845478288641107953

Вот пример, иллюстрирующий методы getstate() и setstate () .

import random

random.seed(1)

# Get the state of the generator
state = random.getstate()

print('Generating a random sequence of 3 integers...')
for i in range(3):
    print(random.randint(1, 1000))

# Restore the state to a point before the sequence was generated
random.setstate(state)
print('Generating the same identical sequence of 3 integers...')
for i in range(3):
    print(random.randint(1, 1000))

Возможный Выход:

Generating a random sequence of 3 integers...
138
583
868
Generating the same identical sequence of 3 integers...
138
583
868

Генерация Случайных Целых Чисел

Модуль random предоставляет некоторые специальные методы для генерации случайных целых чисел.

1. рандрейндж(старт, стоп, шаг)

Возвращает случайно выбранное целое число из диапазона(начало, остановка, шаг) . Это вызывает ошибку ValueError if start > |/stop .

2. рандинт(a, b)

Возвращает случайное целое число между a и b (оба включительно). Это также вызывает ошибку ValueError if a > b .

Вот пример, иллюстрирующий обе вышеперечисленные функции.

import random

i = 100
j = 20e7

# Generates a random number between i and j
a = random.randrange(i, j)
try:
    b = random.randrange(j, i)
except ValueError:
    print('ValueError on randrange() since start > stop')

c = random.randint(100, 200)
try:
    d = random.randint(200, 100)
except ValueError:
    print('ValueError on randint() since 200 > 100')

print('i =', i, ' and j =', j)
print('randrange() generated number:', a)
print('randint() generated number:', c)

Возможный Выход

ValueError on randrange() since start > stop
ValueError on randint() since 200 > 100
i = 100  and j = 200000000.0
randrange() generated number: 143577043
randint() generated number: 170

Генерация случайных чисел с плавающей запятой

Подобно генерации целых чисел, существуют функции, которые генерируют случайные последовательности с плавающей запятой.

  • случайный. random () -> Возвращает следующее случайное число с плавающей запятой в диапазоне от [0.0 до 1.0)
  • случайный. uniform (a, b) -> Возвращает случайную плавающую точку N такую, что a если a и b если b < a.
  • случайный. expovariate (лямбда) -> Возвращает число, соответствующее экспоненциальному распределению.
  • случайный. gauss (mu, sigma) -> Возвращает число, соответствующее гауссову распределению.

Существуют аналогичные функции для других распределений, таких как Нормальное распределение, Гамма-распределение и т. Д.

Пример генерации этих чисел с плавающей запятой приведен ниже:

import random

print('Random number from 0 to 1 :', random.random())
print('Uniform Distribution between [1,5] :', random.uniform(1, 5))
print('Gaussian Distribution with mean = 0 and standard deviation = 1 :', random.gauss(0, 1))
print('Exponential Distribution with lambda = 0.1 :', random.expovariate(0.1))
print('Normal Distribution with mean = 1 and standard deviation = 2:', random.normalvariate(1, 5))

Возможный Выход

Random number from 0 to 1 : 0.44663645835100585
Uniform Distribution between [1,5] : 3.65657099941547
Gaussian Distribution with mean = 0 and standard deviation = 1 : -2.271813609629832
Exponential Distribution with lambda = 0.1 : 12.64275539117617
Normal Distribution with mean = 1 and standard deviation = 2 : 4.259037195111757

Случайные последовательности с использованием модуля random

Подобно целым числам и последовательностям с плавающей запятой, общая последовательность может представлять собой набор элементов, таких как список/кортеж. Модуль random предоставляет полезные функции, которые могут ввести состояние случайности в последовательности.

1. случайное перемешивание(x)

Это используется для перетасовки последовательности на месте. Последовательностью может быть любой список/кортеж, содержащий элементы.

Пример кода для иллюстрации перетасовки:

import random

sequence = [random.randint(0, i) for i in range(10)]

print('Before shuffling', sequence)

random.shuffle(sequence)

print('After shuffling', sequence)

Возможный Выход:

Before shuffling [0, 0, 2, 0, 4, 5, 5, 0, 1, 9]
After shuffling [5, 0, 9, 1, 5, 0, 4, 2, 0, 0]

2. случайный выбор(seq)

Это широко используемая функция на практике, в которой вы хотите случайным образом выбрать элемент из списка/последовательности.

import random

a = ['one', 'eleven', 'twelve', 'five', 'six', 'ten']

print(a)

for i in range(5):
    print(random.choice(a))

Возможный Выход

['one', 'eleven', 'twelve', 'five', 'six', 'ten']
ten
eleven
six
twelve
twelve

3. случайная выборка(популяция, к)

Возвращает случайную выборку из последовательности длины k .

import random

a = ['one', 'eleven', 'twelve', 'five', 'six', 'ten']

print(a)

for i in range(3):
    b = random.sample(a, 2)
    print('random sample:', b)

Возможный Выход

['one', 'eleven', 'twelve', 'five', 'six', 'ten']
random sample: ['five', 'twelve']
random sample: ['ten', 'six']
random sample: ['eleven', 'one']

Случайное семя

Поскольку псевдослучайная генерация основана на предыдущем числе, мы обычно используем системное время, чтобы убедиться, что программа выдает новый вывод каждый раз, когда мы ее запускаем. Таким образом, мы используем семена .

Python предоставляет нам random.seed () , с помощью которого мы можем установить семя, чтобы получить начальное значение. Это начальное значение определяет выход генератора случайных чисел, поэтому, если оно остается неизменным, выход также остается неизменным.

import random

random.seed(1)

print('Generating a random sequence of 4 numbers...')
print([random.randint(1, 100) for i in range(5)])

# Reset the seed to 1 again
random.seed(1)

# We now get the same sequence
print([random.randint(1, 100) for i in range(5)])

Возможный Выход

Generating a random sequence of 4 numbers...
[18, 73, 98, 9, 33]
[18, 73, 98, 9, 33]

Это гарантирует, что мы должны помнить о нашем семени, когда имеем дело с псевдослучайными последовательностями, поскольку последовательность может повторяться, если семя остается неизменным.

Вывод

Мы узнали о различных методах, которые предоставляет нам случайный модуль Python для работы с целыми числами, числами с плавающей запятой и другими последовательностями, такими как списки и т. Д. Мы также видели, как seed влияет на последовательность псевдослучайных чисел.

Рекомендации