Полное руководство по работе с библиотекой random в Python

онлайн тренажер по питону
Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Библиотека Random в Python: полное руководство

Работа со случайными числами является одной из базовых задач в программировании. Независимо от того, создаёте ли вы простую игру, моделируете вероятностные события или работаете с машинным обучением, библиотека random в Python станет надёжным помощником для разработчика.

В данном материале подробно рассмотрим эффективное использование библиотеки random в Python. Разберём функции randint и сравним её с аналогом из библиотеки NumPy.

Что представляет собой библиотека random

Библиотека random является стандартным модулем Python. Она предназначена для генерации псевдослучайных чисел. Модуль не требует дополнительной установки. Библиотека предоставляет широкий спектр функций для генерации случайных чисел, выбора случайных элементов из последовательностей и перемешивания данных.

Основные возможности библиотеки random

  • Генерация случайных чисел различных типов
  • Выбор случайного элемента из списка или кортежа
  • Перемешивание элементов в коллекциях
  • Генерация случайных чисел по нормальному распределению
  • Создание случайных последовательностей
  • Работа с вероятностными распределениями

Импорт и начало работы с random

Для начала работы с библиотекой достаточно импортировать модуль стандартным способом:

import random

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

Основные функции библиотеки random

Функция random.random()

Функция генерирует случайное число с плавающей точкой в диапазоне от 0.0 до 1.0. Число не включает верхнюю границу.

import random
print(random.random())  # Возможный результат: 0.7345832

Функция random.randint() и её особенности

Функция random.randint() является одной из наиболее популярных функций модуля. Она генерирует случайное целое число в заданном диапазоне. Важной особенностью является включение обеих границ диапазона.

random.randint(a, b)  # Возвращает случайное число от a до b включительно

Практическое применение функции randint:

number = random.randint(1, 10)
print(f"Случайное число: {number}")

Результат: случайное число от 1 до 10 включительно.

Функция random.choice()

Функция выбирает случайный элемент из переданной последовательности. Работает со списками, кортежами, строками и другими итерируемыми объектами.

colors = ['red', 'blue', 'green', 'yellow']
selected_color = random.choice(colors)
print(selected_color)  # Возможный результат: 'blue'

Функция random.shuffle()

Функция перемешивает элементы списка непосредственно на месте. Изменяет исходный список без создания нового объекта.

deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
random.shuffle(deck)
print(deck)  # Элементы будут расположены в случайном порядке

Дополнительные функции random

Функция random.uniform()

Генерирует случайное число с плавающей точкой в указанном диапазоне:

value = random.uniform(1.5, 5.5)
print(value)  # Случайное число между 1.5 и 5.5

Функция random.sample()

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

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sample = random.sample(numbers, 3)
print(sample)  # Три случайных числа без повторений

NumPy и функция np.random.randint

Что такое np.random.randint

Функция np.random.randint является аналогом random.randint из библиотеки NumPy. Она используется для работы с массивами и векторизацией числовых данных. Функция чаще применяется в научных расчётах и машинном обучении при необходимости генерации массивов случайных чисел.

import numpy as np
arr = np.random.randint(1, 10, size=5)
print(arr)  # Возможный результат: [3 7 2 9 1]

Сравнение random.randint и np.random.randint

Критерий random.randint np.random.randint
Возвращаемое значение Одно число Массив чисел
Область применения Простые задачи Научные расчёты, машинное обучение
Производительность Низкая при больших объёмах Высокая благодаря оптимизации NumPy
Зависимости Стандартная библиотека Требует установки NumPy

Когда использовать random или np.random

Использование библиотеки random

Применяйте стандартную библиотеку random в следующих случаях:

  • Необходимо получить одно случайное значение
  • Работаете с небольшими списками или простыми структурами данных
  • Создаёте простые игры или приложения
  • Не требуется высокая производительность при генерации множества значений

Использование np.random

Выбирайте NumPy для работы со случайными числами при:

  • Работе с большими наборами данных
  • Необходимости создания многомерных массивов
  • Моделировании сложных математических процессов
  • Разработке алгоритмов машинного обучения
  • Потребности в высокой производительности

Установка NumPy

Если библиотека NumPy ещё не установлена в системе, используйте команду:

pip install numpy

Управление генерацией случайных чисел

Функция random.seed()

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

random.seed(42)
print(random.randint(1, 10))  # Всегда будет одно и то же число

Функция np.random.seed()

Аналогичная функциональность доступна в NumPy:

np.random.seed(42)
arr = np.random.randint(1, 10, size=5)
print(arr)  # Воспроизводимый результат

Практические применения

Создание списка случайных чисел

Генерация списка случайных чисел с помощью list comprehension:

numbers = [random.randint(1, 100) for _ in range(10)]
print(numbers)

Генерация многомерных массивов NumPy

Создание двумерного массива случайных чисел:

matrix = np.random.randint(0, 10, size=(100, 100))
print(matrix.shape)  # (100, 100)

Работа с нормальным распределением

Генерация чисел по нормальному распределению:

# Стандартная библиотека
normal_number = random.gauss(0, 1)  # среднее=0, стандартное отклонение=1

# NumPy
normal_array = np.random.normal(0, 1, size=1000)

Безопасность и криптография

Важно отметить, что модуль random не подходит для криптографических целей. Для генерации криптографически стойких случайных данных используйте модуль secrets:

import secrets

# Генерация безопасного случайного числа
secure_number = secrets.randbelow(100)

# Генерация токена
token = secrets.token_hex(16)

Оптимизация работы со случайными числами

Производительность при больших объёмах данных

При работе с большими объёмами данных NumPy значительно превосходит стандартную библиотеку random по скорости выполнения. Это связано с оптимизированной реализацией на языке C и векторизацией операций.

Выбор подходящего распределения

В зависимости от задачи выбирайте подходящее распределение:

  • Равномерное распределение для симуляций
  • Нормальное распределение для моделирования природных явлений
  • Экспоненциальное распределение для моделирования времени ожидания

Отладка и тестирование

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

Заключение

Библиотека random в Python представляет собой мощный и простой инструмент для генерации случайных данных. При работе с массивами и сложными научными задачами на помощь приходит np.random из библиотеки NumPy. Выбор между этими инструментами зависит от конкретных требований проекта.

Понимание различий между random.randint и np.random.randint позволяет принимать обоснованные решения при выборе подходящего инструмента. Для простых задач достаточно стандартной библиотеки, для научных расчётов и машинного обучения предпочтительнее NumPy.

При планировании изучения анализа данных или машинного обучения рекомендуется освоить работу с NumPy и его возможностями генерации случайных данных. Это обеспечит более эффективную работу с большими объёмами данных и сложными математическими операциями.

Новости