Python для математичних обчислень

imageЕкосистема мови python стрімко розвивається. Це вже не просто мова загального призначення. З його допомогою можна успішно розробляти веб-додатки, системні утиліти і багато іншого. У цій замітці ми сконцентруємося на іншому додатку, а саме на наукових обчисленнях.
Ми спробуємо знайти в мові функції, які зазвичай вимагаємо від математичних пакетів. Розглянемо сильні і слабкі сторони ідеї використання python замість MATLAB, Maple, Mathcad, Mathematica.
Середовище розробки
Код на python може бути поміщена в файл з розширенням .py і відправлений інтерпретатору для виконання. то класичний підхід, який зазвичай розбавляється використанням середовища розробки, наприклад pyCharm. Однак, для python (і не тільки) існує інший спосіб взаємодії з інтерпретатором — інтерактивні блокноти jupyter, зберігають проміжний стан між виконанням різних блоків коду, які можуть бути виконані в довільному порядку. Цей спосіб взаємодії запозичений у блокнотів Mathematica, пізніше з'явився аналог і в MATLAB (Live script).

Таким чином вся робота з python-кодом переноситься в браузер. Вийшла блокнот можна відкрити за допомогою nbviewer.jupyter.org, github (gist вміють самостійно показувати вміст таких файлів (перетворювати).
З браузерною природи jupyter слідують його недоліки: відсутність відладчика і проблеми з друком великої кількості інформації (зависання вікна браузера). Остання проблема вирішується розширенням, яке обмежує максимальну кількість символів, яку можна вивести в результаті виконання однієї клітинки.
Візуалізація даних
Для візуалізації даних зазвичай використовується бібліотека matplotlib, команди якої дуже схожі на MATLABовские. У Stanford'е була розроблена бібліотека, розширює можливості matplotlib — seaborn (незвичайні графіки для статистики).

Розглянемо приклад побудови діаграми для згенерованої вибірки даних.
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, нормованих=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()


Ми бачимо, що синтаксис matplotlib дуже схожий на синтаксис MATLAB. Варто так само відзначити, що в заголовку графіка використовується latex.
Обчислювальні математика
Для лінійної алгебри в python прийнято використовувати numpy, вектора і матриці якого типизированы, на відміну від вбудований в мову списків. Для наукових обчислень використовується бібліотека scipy.
Спеціально для користувачів MATLAB написаний гайд по переходу з MATLAB на numpy.
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. Однак, код, написаний за допомогою sympy, поступається в красі кодом, написаним на Mathematica, яка спеціалізована на символьних обчисленнях.
# python
from sympy import Symbol, solve

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


По функціональності Sympy поступається Mathematica, проте, з урахуванням ваших потреб, може виявитися, що для вас їх можливості приблизно однакові. Більш докладне порівняння можна знайти на wiki репозиторію sympy.
Прискорюємо код
Для прискорення вашого коду за рахунок перетворення в C++ може бути реалізовано за коштами бібліотеки theano. Платою за таке прискорення стає синтаксис, тепер вам потрібно писати 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 і Keras, використовують theano для своїх обчислень. Варто також додати, що theano підтримує прискорення за рахунок обчислень на GPU.
Машинне навчання
найпопулярнішою бібліотекою машинного навчання для python є scikit-learn, яка містить всі основні алгоритми машинного навчання, а так само метрики якості, інструменти для валідації алгоритмів, інструменти для перед-обробки даних.

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. Завантажені дані представляються у пам'яті у вигляді DataFrame'ів, до яких можна застосовувати різноманітні операції: як малі (порядкова обробка), так і групові (фільтри, угруповання). Огляд основних функцій pandas можна знайти в презентації "Pandas: огляд основних функцій" (Автор: Олександр Дияконів, професор МДУ).
Не все так гладко...
Однак, не все так гладко в python. Наприклад, зараз уживається дві версії мови 2.3., обидві вони розвиваються паралельно, однак синтаксис 2ой версії не повністю сумісний з синтаксисом 3ей версії.
Ще одна проблема може виникнути у вас, якщо ви не володар linux, в цьому випадку при встановленні ряду бібліотек у вас можуть виникнути труднощі, деякі бібліотеки будуть повністю не сумісні, наприклад tensorflow.
Бібліотеки, про яких йшла мова
  • Jupyter (онлайн блокноти)

  • Matplotlib (графіки)
  • Seaborn (графіки)
  • Numpy (лінійна алгебра)
  • Scipy (наукові обчислення)
  • Sympy (символьні обчислення)
  • Theano (перетворення в C++, обчислення на GPU)
  • Scikit-learn (машинне навчання)
  • Pandas (завантаження даних і прості операції над ними)

P. S: всі бібліотеки для python, про яких говорилося цій статті, мають відкритий вихідний код і поширюються безкоштовно. Для їх завантаження можна скористатися командою pip або просто завантажити збірку Anaconda, яка містить всі основні бібліотеки.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.