- PVSM.RU - https://www.pvsm.ru -

Python для математических вычислений

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

Мы попытаемся найти в языке функции, которые обычно требуем от математических пакетов. Рассмотрим сильные и слабые стороны идеи использования python вместо MATLAB, Maple, Mathcad, Mathematica.

Среда разработки

Код на python может быть помещен в файл с расширением .py и отправлен интерпретатору для выполнения. то классический подход, который обычно разбавляется использованием среды разработки, например pyCharm. Однако, для python (и не только [1]) существует другой способ взаимодействия с интерпретатором — интерактивные блокноты jupyter [2], сохраняющие промежуточное состояние программы между выполнением различных блоков кода, которые могут быть выполнены в произвольном порядке. Этот способ взаимодействия позаимствован у блокнотов Mathematica, позже аналог появился и в MATLAB (Live script).

Python для математических вычислений - 2

Таким образом вся работа с python-кодом переносится в браузер. Получившейся блокнот можно открыть с помощью nbviewer.jupyter.org [3], github [4]gist [5]) умеют самостоятельно показывать содержимое таких файлов (преобразовывать).

Из браузерной природы jupyter следуют его недостатки: отсутствие отладчика и проблемы с печатью большого количества информации (зависание окна браузера). Последняя проблема решается расширением, которое ограничивает максимальное количество символов, которое можно вывести в результате выполнения одной ячейки.

Визуализация данных

Для визуализации данных обычно используется библиотека matplotlib [6], команды которой очень похожи на MATLABовские. В Stanford'е была разработана библиотека, расширяющая возможности matplotlib — seaborn [7] (необычные графики для статистики).

Python для математических вычислений - 3

Рассмотрим пример построения гистограммы для сгенерированной выборки данных.

import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

# example data
mu = 100  # mean of distribution
sigma = 15  # standard deviation of distribution
x = mu + sigma * np.random.randn(10000)
num_bins = 50
# the histogram of the data
n, bins, patches = plt.hist(x, num_bins, normed=1, facecolor='green', alpha=0.5)
# add a 'best fit' line
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins, y, 'r--')
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title(r'Histogram of IQ: $mu=100$, $sigma=15$')

# Tweak spacing to prevent clipping of ylabel
plt.subplots_adjust(left=0.15)
plt.show()

Python для математических вычислений - 4

Мы видим, что синтаксис matplotlib очень похож на синтаксис MATLAB. Стоит так же заметить, что в заголовке графика используется latex.

Вычислительные математика

Для линейной алгебры в python принято использовать numpy [8], вектора и матрицы которого типизированы, в отличии от встроенный в язык списков. Для научных вычислений используется библиотека scipy [9].

Специально для пользователей MATLAB написан гайд по переходу с MATLAB на numpy [10].

import scipy.integrate as integrate
import scipy.special as special

result = integrate.quad(lambda x: special.jv(2.5,x), 0, 4.5)

В данном примере численно вычисляется значение определенного интеграла функции Бесселя на отрезке [0,0.45] с помощью библиотеки QUADPACK (Fortran).

Символьные вычисления

Для использования символьных вычислений можно использовать библиотеку sympy [11]. Однако, код, написанный с помощью sympy, уступает в красоте коду, написанному на Mathematica, которая специализирована на символьных вычислениях.

# python
from sympy import Symbol, solve

x = Symbol("x")
solve(x**2 - 1)

Python для математических вычислений - 5

По функциональности Sympy уступает Mathematica, однако, с учетом ваших потребностей, может оказаться, что для вас их возможности приблизительно равны. Более подробное сравнение можно найти в wiki репозитория sympy [12].

Ускоряем код

Для ускорения вашего кода за счет преобразования в C++ может быть реализовано по средствам библиотеки theano [13]. Платой за такое ускорение становится синтаксис, теперь вам требуется писать theano-ориентированные функции и указывать типы всех переменных.

import theano
import theano.tensor as T

x = T.dmatrix('x')
s = 1 / (1 + T.exp(-x))
logistic = theano.function([x], s)
logistic([[0, 1], [-1, -2]])

Некоторые библиотеки для сверточных нейронных сетей, такие как Lasagne [14] и Keras [15], используют theano для своих вычислений. Стоит так же добавить, что theano поддерживает ускорение за счет вычислений на GPU.

Машинное обучение

Самой популярной библиотекой машинного обучения для python является scikit-learn [16], которая содержит все основные алгоритмы машинного обучения, а так же метрики качества, инструменты для валидации алгоритмов, инструменты для пред-обработки данных.

Python для математических вычислений - 6

from sklearn import svm
from sklearn import datasets

clf = svm.SVC()
iris = datasets.load_iris()
X, y = iris.data, iris.target
clf.fit(X, y)  

clf.predict(X)

Для работы загрузки данных из табличных форматов данных (excel, csv) обычно используется pandas [17]. Загруженные данные представляются в памяти в виде DataFrame'ов, к которым можно применять различные операции: как строчные (построчная обработка), так и групповые (фильтры, группировки). Обзор основных функций pandas можно найти в презентации "Pandas: обзор основных функций [18]" (Автор: Александр Дьяконов, профессор МГУ).

Не все так гладко...

Однако, не все так гладко в python. Например, сейчас уживается две версии языка 2. и 3., обе они развиваются параллельно, однако синтаксис 2ой версии не совместим полностью с синтаксисом 3ей версии.

Еще одна проблема может возникнуть у вас, если вы не обладатель linux, в этом случае при установке ряда библиотек у вас могут возникнуть трудности, некоторые библиотеки будут полностью не совместимы, например tensorflow [19].

Библиотеки, о которых шла речь

  • Jupyter [2] (онлайн блокноты)
  • Matplotlib [6] (графики)
  • Seaborn [7] (графики)
  • Numpy [8] (линейная алгебра)
  • Scipy [9] (научные вычисления)
  • Sympy [20] (символьные вычисления)
  • Theano [13] (преобразование в C++, вычисления на GPU)
  • Scikit-learn [16] (машинное обучение)
  • Pandas [17] (загрузка данных и простые операции над ними)

P.S: все библиотеки для python, о которых говорилось данной статье, имеют открытый исходный код и распространяются бесплатно. Для их загрузки можно воспользоваться командой pip [21] или просто скачать сборку Anaconda [22], которая содержит все основные библиотеки.

Автор: bos4r

Источник [23]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/198422

Ссылки в тексте:

[1] и не только: https://github.com/ipython/ipython/wiki/IPython-kernels-for-other-languages

[2] jupyter: http://jupyter.org/

[3] nbviewer.jupyter.org: http://nbviewer.jupyter.org/

[4] github: https://github.com/

[5] gist: https://gist.github.com

[6] matplotlib: http://matplotlib.org/

[7] seaborn: https://stanford.edu/~mwaskom/software/seaborn/

[8] numpy: http://www.numpy.org/

[9] scipy: https://www.scipy.org/

[10] написан гайд по переходу с MATLAB на numpy: http://docs.scipy.org/doc/numpy-dev/user/numpy-for-matlab-users.html

[11] sympy: http://www.sympy.org/

[12] wiki репозитория sympy: https://github.com/sympy/sympy/wiki/SymPy-vs.-Mathematica

[13] theano: http://deeplearning.net/software/theano/

[14] Lasagne: https://github.com/Lasagne/Lasagne

[15] Keras: https://keras.io/

[16] scikit-learn: http://scikit-learn.org/stable/

[17] pandas: http://pandas.pydata.org/

[18] Pandas: обзор основных функций: http://www.slideshare.net/dyakonov/pandas-54795658

[19] tensorflow: https://www.tensorflow.org/versions/r0.11/get_started/os_setup.html

[20] Sympy: http://www.sympy.org/en/index.html

[21] pip: https://pypi.python.org/pypi/pip

[22] Anaconda: https://www.continuum.io/downloads

[23] Источник: https://habrahabr.ru/post/312268/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best