Книга «Изучаем Python»



Pdf көрінісі
бет192/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   188   189   190   191   192   193   194   195   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

319
Рис. 15.7.
Точечная диаграмма с цветовой картой Blues
Автоматическое сохранение диаграмм
Если вы хотите, чтобы программа автоматически сохраняла диаграмму в файле, 
замените вызов 
plt.show()
вызовом 
plt.savefig()
:
plt.savefig('squares_plot.png', bbox_inches='tight')
Первый аргумент содержит имя файла для сохранения диаграммы; файл будет со-
хранен в одном каталоге с 
scatter_squares .py
. Второй аргумент отсекает от диаграм-
мы лишние пропуски. Если вы хотите оставить пустые места вокруг диаграммы, 
этот аргумент можно опустить.
УПРАЖНЕНИЯ
15-1 . Кубы: число, возведенное в третью степень, называется «кубом» . Нанесите на диа-
грамму первые пять кубов, а затем первые 5000 кубов .
15-2 . Цветные кубы: примените цветовую карту к диаграмме с кубами .
Случайное блуждание
В этом разделе мы используем Python для генерирования данных для случайного 
обхода, а затем при помощи 
matplotlib
создадим привлекательное представление 
сгенерированных данных. 
Случайным блужданием 
(random walk) называется путь, 
который не имеет четкого направления, но определяется серией полностью случай-
ных решений. Представьте, что муравей сошел с ума и делает каждый новый шаг 
в случайном направлении; его путь напоминает случайное блуждание.
Случайное блуждание находит практическое применение в естественных науках: 
физике, биологии, химии и экономике. Например, пыльцевое зерно на поверх-
ности водяной капли движется по поверхности воды, потому что его постоянно 
подталкивают молекулы воды. Молекулярное движение в капле воды случайно, 


320
Глава 15 • Генерирование данных
поэтому путь пыльцевого зерна на поверхности представляет собой случайное 
блуждание. Код, который мы напишем, найдет применение при моделировании 
многих реальных ситуаций.
Создание класса RandomWalk()
Чтобы создать путь случайного блуждания, мы создадим класс 
RandomWalk
, кото-
рый принимает случайные решения по выбору направления. Классу нужны три 
атрибута: переменная для хранения количества точек в пути и два списка для 
координат 
x
и 
y
каждой точки.
Класс 
RandomWalk
содержит всего два метода: 
__init__()
и 
fill_walk()
для вычис-
ления точек случайного блуждания. Начнем с метода 
__init__()
:
random_walk.py
 
from random import choice
class RandomWalk():
"""Класс для генерирования случайных блужданий."""
 
def __init__(self, num_points=5000):
"""Инициализирует атрибуты блуждания."""
self.num_points = num_points
# Все блуждания начинаются с точки (0, 0).
 
self.x_values = [0]
self.y_values = [0]
Чтобы принимать случайные решения, мы сохраним возможные варианты в списке 
и используем функцию 
choice()
для принятия решения 

. Затем для списка уста-
навливается количество точек по умолчанию равным 5000 — достаточно большим, 
чтобы генерировать интересные закономерности, но достаточно малым, чтобы 
блуждания генерировались быстро 

. Затем в точке 

создаются два списка для 
хранения значений 
x
и 
y
, после чего каждый путь начинается с точки (0, 0).
Выбор направления
Метод 
fill_walk()
, как показано ниже, заполняет путь точками и определяет на-
правление каждого шага. Добавьте этот метод в 
random_walk .py
:
random_walk.py
def fill_walk(self):
"""Вычисляет все точки блуждания."""
# Шаги генерируются до достижения нужной длины.
 
while len(self.x_values) < self.num_points:
# Определение направления и длины перемещения.
 
x_direction = choice([1, -1])
x_distance = choice([0, 1, 2, 3, 4])
 
x_step = x_direction * x_distance


Случайное блуждание
321
y_direction = choice([1, -1])
y_distance = choice([0, 1, 2, 3, 4])
 
y_step = y_direction * y_distance
# Отклонение нулевых перемещений.
 
if x_step == 0 and y_step == 0:
continue
# Вычисление следующих значений x и y.
 
next_x = self.x_values[-1] + x_step
next_y = self.y_values[-1] + y_step
self.x_values.append(next_x)
self.y_values.append(next_y)
В точке 

запускается цикл, который выполняется вплоть до заполнения пути 
правильным количеством точек. Главная часть этого метода сообщает Python, как 
следует моделировать четыре случайных решения: двигаться ли вправо или влево? 
Как далеко идти в этом направлении? Двигаться ли вверх или вниз? Как далеко 
идти в этом направлении?
Выражение 
choice([1,
-1])
выбирает значение 
x_direction
; оно возвращает 1 для 
перемещения вправо или –1 для движения влево 

. Затем выражение 
choice([0,
1,
2,
3,
4])
определяет дальность перемещения в этом направлении (
x_distance

случайным выбором целого числа от 0 до 4. (Включение 0 позволяет выполнять 
шаги по оси 
y
, а также шаги со смещением по обеим осям.)
В точках 

и 

определяется длина каждого шага в направлениях 
x
и 
y
, для чего 
направление движения умножается на выбранное расстояние. При положительном 
результате 
x_step
смещает вправо, при отрицательном — влево, при нулевом — 
вертикально. При положительном результате 
y_step
смещает вверх, при отрица-
тельном — вниз, при нулевом — горизонтально. Если оба значения 
x_step
и 
y_step
равны 0, то блуждание останавливается, но цикл продолжается 

.
Чтобы получить следующее значение 
x
, мы прибавляем значение 
x_step
к по-
следнему значению, хранящемуся в 
x_values

, и делаем то же самое для значе-
ний 
y
. После того как значения будут получены, они присоединяются к 
x_values
и 
y_values
.
Вывод случайного блуждания
Ниже приведен код отображения всех точек блуждания:
rw_visual.py
import matplotlib.pyplot as plt
from random_walk import RandomWalk
# Построение случайного блуждания и нанесение точек на диаграмму.
 
rw = RandomWalk()
rw.fill_walk()
 
plt.scatter(rw.x_values, rw.y_values, s=15)
plt.show()


322

Достарыңызбен бөлісу:
1   ...   188   189   190   191   192   193   194   195   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет