03 декабря 2016

Введение в SciPy

Введение

SciPy представляет собой совокупность математических алгоритмов и функций, построенных как расширение Numpy на Python. Он значительно расширяет возможности интерактивной сессии Python, предоставляя пользователю команды высокого уровня и классы для управления и визуализации данных. Со SciPy интерактивный сеанс Python становится средой обработки данных и системой прототипирования соперничающей с такими системами, как MATLAB, IDL, Octave, R-Lab, and SciLab.

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

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

Для краткости и удобства, мы часто будем предполагать, что основные пакеты (NumPy, SciPy и Matplotlib) были импортированы как:

>>> import numpy as np
>>> import matplotlib as mpl
>>> import matplotlib.pyplot as plt


Это соглашения о виде импорта являются общими, принятыми после публичного обсуждения. Вы увидите эти условные обозначения, во всем исходном коде и документации NumPy и SciPy. В то время как, очевидно, от вас не требуются, следование этим соглашениям в собственном коде, хотя и настоятельно рекомендуется.

Структура SciPy

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

Подпакет
Описание
cluster
Алгоритмы кластеризации
constants
Физические и математические константы
fftpack
Подпрограммы быстрого преобразования Фурье
integrate
Интегрирование и решение обыкновенных дифференциальных уравнений
interpolate
Интерполяционные и сглаживающие сплайны
io
Ввод и вывод
linalg
Линейная алгебра
ndimage
обработка N-мернох изображений
odr
Мультиплексирование с ортогональным расстояние регрессии
optimize
Оптимизация и поиск корневых структур
signal
Обработка сигналов
sparse
Разреженные матрицы и связанные с ними процедуры
spatial
Пространственные структуры данных и алгоритмы
special
Специальные функции
stats
Статистические распределения и функции
weave
C/C ++ интеграция

SciPy подпакеты должны быть импортированы отдельно, например:

>>> from scipy import linalg, optimize

Из-за повсеместности, некоторые из функций этих подпакетов также доступны в пространстве имен SciPy, чтобы облегчить их использование в интерактивных сессиях и программах. Кроме того, многие основные функции массивов из NumPy также доступны на верхнем уровне SciPy пакета. Прежде чем взглянуть на суб-пакеты по отдельности, мы сначала посмотрим на некоторые из этих общих функций.

Поиск документации

SciPy и NumPy имеют версии документации в HTML и PDF формате доступные на https://docs.scipy.org/~~pobj, которые охватывают практически все доступные функциональные возможности . Тем не менее, эта документация по-прежнему находится в стадии разработки и некоторые части могут быть неполными или отсутствовать. Поскольку мы являемся добровольной организацией и зависим от сообщества, все ваше участие от обратной связи до совершенствования документации и кода - приветствуется и активно поощряется.

Документация языка Python используются в SciPy для он-лайн документации. Есть два способа читать их и получать помощь. Одним из них является команда help в Python в модуле pydoc. Ввод этой команды без аргументов (т.е. >>>help) запускает интерактивную справочную сессию , которая позволяет осуществлять поиск по ключевым словам и модулям, доступных для всего в Python. Во- вторых, выполнив команду help(obj) с объектом в качестве аргумента отображает подпись этого объекта, и его текст документации.

Метод help из pydoc является сложным, но использует страницы для отображения текста. Иногда это может мешать терминалу если вы работаете в пределах интерактивного сеанса. Numpy/scipy специализированная справочная система также доступна командой numpy.info . Строка подписи и документация для объекта, переданного в помощи команды печатаются на стандартный вывод (или в записываемый объект, переданный в качестве третьего аргумента). Второй аргумент numpy.info определяет максимальную длину строки для печати. Если в качестве аргумента передается модуль, то выводится список функций и классов, определенных в этом модуле. Например:

>>> np.info(optimize.fmin)
 fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None,
      full_output=0, disp=1, retall=0, callback=None)

Minimize a function using the downhill simplex algorithm.

Parameters
----------
func : callable func(x,*args)
    The objective function to be minimized.
x0 : ndarray
    Initial guess.
args : tuple
    Extra arguments passed to func, i.e. ``f(x,*args)``.
callback : callable
    Called after each iteration, as callback(xk), where xk is the
    current parameter vector.

Returns
-------
xopt : ndarray
    Parameter that minimizes function.
fopt : float
    Value of function at minimum: ``fopt = func(xopt)``.
iter : int
    Number of iterations performed.
funcalls : int
    Number of function calls made.
warnflag : int
    1 : Maximum number of function evaluations made.
    2 : Maximum number of iterations reached.
allvecs : list
    Solution at each iteration.

Other parameters
----------------
xtol : float
    Relative error in xopt acceptable for convergence.
ftol : number
    Relative error in func(xopt) acceptable for convergence.
maxiter : int
    Maximum number of iterations to perform.
maxfun : number
    Maximum number of function evaluations to make.
full_output : bool
    Set to True if fopt and warnflag outputs are desired.
disp : bool
    Set to True to print convergence messages.
retall : bool
    Set to True to return list of solutions at each iteration.

Notes
-----
Uses a Nelder-Mead simplex algorithm to find the minimum of function of
one or more variables.

Другая полезная команда source. В качестве аргумента она принимает функцию, написанную на Python и выводит исходной код этой функции. Это может быть полезно для изучения алгоритма или точного понимания того, что функция делает со своими аргументами. Также не забывайте о командной Python dir, которую можно использовать, для просмотра пространства имен модуля или пакета.