Случайные числа нужны, чтобы моделировать: бросать кости, перемешивать участников, проверять идеи на
придуманных данных. В NumPy их выдаёт генератор (generator). Его создают один раз функцией
np.random.default_rng, а потом просят у него числа методами:
import numpy as np
rng = np.random.default_rng(0)
print(rng.integers(1, 11, size=5))
print(rng.random(3))
print(rng.integers(0, 100, size=(2, 4)))[9 7 6 3 4] [0.01652764 0.81327024 0.91275558] [[ 4 50 60 97] [72 63 54 55]]
rng.integers(начало, конец, size=n)—nслучайных целых отначалодоконец(конец не входит — как уarange);rng.random(n)—nдробных чисел от 0 (включительно) до 1 (не включая).
Параметр size можно задать и формой — size=(3, 4) даст таблицу случайных чисел.
Seed: повторяемая случайность
Число в скобках default_rng(42) — seed («зерно»): с какого места начинается последовательность. С одним
и тем же seed генератор выдаёт одни и те же числа — при каждом запуске и на любом компьютере:
a = np.random.default_rng(2025).integers(1, 100, size=5)
b = np.random.default_rng(2025).integers(1, 100, size=5)
print(a)
print(b)
print((a == b).all())[45 99 99 38 95] [45 99 99 38 95] True
Создайте генератор rng с seed 42 и сохраните в rolls 20 бросков игрального кубика — случайные целые
от 1 до 6.
np.random.default_rng(42).rng.integers(1, 7, size=20): конец не входит.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
rng = ...
rolls = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
rng = np.random.default_rng(42)
rolls = rng.integers(1, 7, size=20)Какие числа может вернуть rng.integers(1, 7)?
range и arange, конец не входит: 7 не выпадет никогда. Это и есть обычный кубик.Доля и вероятность
С логическими масками из модуля 4 случайные числа сразу превращаются в оценки вероятностей: rng.random(n) < 0.3 — это n «событий», каждое происходит с вероятностью 0.3. Доля True будет близка к 0.3, и тем ближе,
чем больше n:
rng = np.random.default_rng(1)
for n in [10, 100, 10000]:
print(n, (rng.random(n) < 0.3).mean())10 0.2 100 0.3 10000 0.2987
Создайте генератор с seed 3 и смоделируйте 1000 бросков монеты: сохраните в heads маску «выпал орёл»
(вероятность 0.5), а в share — долю орлов.
rng.random(1000) < 0.5 — маска орлов.True — среднее маски.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
rng = ...
heads = ...
share = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
rng = np.random.default_rng(3)
heads = rng.random(1000) < 0.5
share = heads.mean()Случайный выбор: choice
rng.choice(варианты, size=n) выбирает n элементов из массива или списка. По умолчанию элементы могут
повторяться — как при бросках кубика. replace=False запрещает повторы — как при вытягивании шаров из барабана:
rng = np.random.default_rng(11)
print(rng.choice(["орёл", "решка"], size=6))
print(rng.choice(np.arange(1, 11), size=5, replace=False))['орёл' 'орёл' 'решка' 'орёл' 'решка' 'решка'] [ 2 1 5 4 10]
Создайте генератор с seed 7 и сохраните в ticket шесть разных чисел от 1 до 49, отсортированных
по возрастанию.
np.arange(1, 50); без повторов — replace=False.np.sort(...).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
rng = ...
ticket = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
rng = np.random.default_rng(7)
ticket = np.sort(rng.choice(np.arange(1, 50), size=6, replace=False))Создайте генератор с seed 5 и выберите из списка speakers одного человека — того, кто выступает первым.
Сохраните имя в first.
size метод choice возвращает один элемент.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
speakers = ["Анна", "Иван", "Мария", "Олег"]
rng = ...
first = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
speakers = ["Анна", "Иван", "Мария", "Олег"]
rng = np.random.default_rng(5)
first = rng.choice(speakers)Итоги
rng = np.random.default_rng(seed)— генератор; одинаковый seed — одинаковые числа.rng.integers(a, b, size=n)— целые отaдоb − 1;rng.random(n)— дробные от 0 до 1, не включая 1.rng.random(n) < p—nсобытий с вероятностьюp; доляTrueоценивает вероятность.rng.choice(варианты, size=n, replace=False)— выбор без повторов.- Каждый вызов продвигает генератор; чтобы повторить результат, создайте его заново с тем же seed.