Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Векторизация

Великолепным преимуществом массивов является то, что они могут обходиться без циклов и функция может применяться, как мы объясняли выше, к самому массиву и производить действия над всеми элементами:

>>> y2 = f(x2)  >>> y2 array([ 0. , 0.015625, 0.125 , 0.421875, 1. ])

И даже сложные составные выражения

r = sin(x)*cos(x)*exp(-x**2) + 2 + x**2

подвластны волшебству массивов:

r = zeros(len(x))  for i in xrange(len(x)):      r[i] = sin(x[i])*cos(x[i])*exp(-x[i]**2) + 2 + x[i]**2

Это свойство и называется векторизацией. Существенный выигрыш в скорости по сравнению со списками происходит из-за того что в генерации списков используется относительно медленные циклы самого Python, в то время как векторизация их никак явно не использует, а задействует «быстрые циклы» внутри numpy. Кроме того, что векторизация существенно повышает скорость обработки, она делает код более понятным и ясным для чтения.

Но приведенный выше код не является “чистой векторизацией”, в нем используется цикл for, без которого можно обойтись, если использовать тригонометрические функции из пакета numpy (которые поддаются векторизации):

from numpy import *  x = linspace(-pi,pi,11)  r = sin(x)*cos(x)*exp(-x**2) + 2 + x**2

Визуализация функций в Matplotlib

Визуализация функции f(x) состоит в том, чтобы нарисовать кривую y = f(x) в системе координат Оxy. Технически это заключается в проведении прямых линий между точками, заданными значениями функции. Чем больше точек мы берем, тем более гладкой получается кривая.

Предположим, мы хотим изобразить функцию f(x) для a < x < b. Сначала мы должны задать n координат в интервале [a, b], которые мы назовем x0,x1,…,xn−1. Затем мы вычисляем yi=f(xi). Далее, если мы расположим значения xi и yi соответственно в массивах x и y, мы можем начертить график с помощью команды plot(x, y).

Естественно, имена функции и аргумента могут быть другими. В нашем первом примере о графиках мы будем рисовать кривую для функции от времени t.

Matplotlib

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

Набор точек

График, полученный в примере 1

Одним из больших преимуществ Matplotlib является та скорость, с которой мы можем построить график и привести первый пример:

>>> import matplotlib.pyplot as plt  >>> plt.plot([1, 3, 2, 4])  [<matplotlib.lines.Line2D object at 0x01A00430>]  >>> plt.show()

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

В первой инструкции мы импортировали основной модуль библиотеки для построения графиков под именем plt, именно так наиболее часто сокращается это длинное имя. Мы не используем импортирование всех функций через *, поскольку, во-первых это долго, во-вторых сильно захламляет пространство имен. Поэтому пользуемся коротким префиксом. После того, как мы импортировали модуль, мы можем пользоваться его функциями, здесь мы использовали функцию plot(), которая собственно и строит график, а потом функция show() его нам показывает.

Аргумент, принимаемый функцией plot() это последовательность y-значений. Другой, который мы опустили, стоящий перед y — это последовательность x-значений. Поскольку его нет, генерируется для четырех указанных y, список из четырех x: [0, 1, 2, 3]. Отсюда и такой график.