1 / 19

NumPy , SciPy

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

kosey
Download Presentation

NumPy , SciPy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. NumPy, SciPy

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

  3. Модули

  4. Структуры данных • Основной структурой данных в SciPy является многомерный массив, реализованный модулем NumPy. Более старые версии SciPy использовали для этой цели Numeric, который сейчас заменён на более новый NumPy

  5.  — это расширение языка Python, добавляющее поддержку больших многомерных массивов и матриц, вместе с большой библиотекой высокоуровневых математических функций для операций с этими массивами. Сайт: http://numpy.scipy.org/Поддерживаемые версии Python: 2.5, 2.6 (есть более старые версии, которые поддерживают Python 2.3 и 2.4)Документация: http://scipy.org/doc/numpy_api_docs/

  6. Научные вычисления в Python • Работа с матрицами и векторами • Быстрое преобразование Фурье (одномерное и двумерное) • Компиляция модулей на фортране • Работа с полиномами (вычисление корней полинома, математические операции с полиномами и т.п.) • Функции для линейной алгебры (вычисление определителя матрицы, вычисление обратных матриц, решение системы линейных уравнений и т.п.)

  7. Numericvsnumarrayvsnumpy • Существует 3 различных реализации NumericPython (NumPy) • Numeric – самый первый, следовательно самый распространенный • numarray – переделка, с дополнениями • numpy – переделка, смесь первых двух, с усовершенствованиями • Все эти пакеты имеют сходный интерфейс. • Реализационные различия: • numpy быстрее для векторных операций • Numeric – для скалярных • Все сказанное означает, что можно использовать как и numpy, так и наиболее общий интерфейс NumericalPython, т.к. любая из трех реализаций может быть Вами использована в последствии

  8. Мотивация • Математические алгоритмы часто работают в Python гораздо медленнее, чем в компилируемых языках. NumPy пытается решить эту проблему для большого количества вычислительных алгоритмов, обеспечивая поддержку многомерных массивов и множество функций и операторов для работы с ними. • Альтернатива MATLAB

  9. Зачем нужны массивы? • Векторизация (прорисовка): массивы исключают потребность в циклах, проходящих по их элементам • Массивы с одним индексом – вектора; с двумя - используются для создания матриц и представления табличной информации; n-мерные.

  10. работа с модулем происходит обычным образом: fromnumpyimport* Конвертирование списка r в массив a происходит привычным способом, но с помощью импортированной из numpy функции: a = array(r) Для того, чтобы создать массив из n нулевых элементов используем функцию zeros: a = zeros(n) Часто бывает нужно создать массив из элементов, равномерно распределенных в интервале [p, q]. Для этого в numpy есть функция linspace: a = linspace(p, q, n)

  11. Векторизация функция может применяться к самому массиву и производить действия над всеми элементами И даже сложные составные выражения r = sin(x)*cos(x)*exp(-x**2) + 2 + x**2 подвластны волшебству массивов: r = zeros(len(x)) foriinxrange(len(x)): r[i] = sin(x[i])*cos(x[i])*exp(-x[i]**2) + 2 + x[i]**2 + • существенный выигрыш в скорости по сравнению со списками • существенно повышает скорость обработки • делает код более понятным и ясным для чтения

  12. Работа с матрицами Два класса - array и matrix. Различия в некоторых операциях над экземплярами классов: оператор * для array производит поэлементное перемножение хранимых в матрице величин. А для перемножения матриц по правилам линейной алгебры есть метод dot.

  13. importnumpy# Создание матрицыa = numpy.array ([[1, 2, 3], [4, 5, 6], [7, 8, 9]], "f")print a >>> [[ 1.  2.  3.] [ 4.  5.  6.] [ 7.  8.  9.]]

  14. # Создадим единичную матрицу размера 3 x 3. Матрица будет хранить числа с плавающей точкой.a = numpy.ones ([3,3], "f")printa >>> [[ 1.  1.  1.] [ 1.  1.  1.] [ 1.  1.  1.]] b = numpy.ones ([3,3], "f")b *= 2print b >>> [[ 2.  2.  2.] [ 2.  2.  2.] [ 2.  2.  2.]] c = a + bprint c >>> [[ 3.  3.  3.] [ 3.  3.  3.] [ 3.  3.  3.]]

  15. Перемножение матриц и их элементов a = numpy.array ([[1, 2, 3], [4, 5, 6]], "f")print a >>>[[ 1.  2.  3.] [ 4.  5.  6.]]b = numpy.array ([[0, 1, 2], [4, -1, 1]], "f")print b >>>[[ 0.  1.  2.] [ 4. -1.  1.]]# Поэлементное перемножениеc1 = a * bprint c1 >>>[[  0.   2.   6.] [ 16.  -5.   6.]]# Транспонирование матрицыbt= b.Tprintbt >>>[[ 0.  4.] [ 1. -1.] [ 2.  1.]]# Перемножение матрицc2 = numpy.dot(a, bt)print c2 >>>[[  8.   5.] [ 17.  17.]]

  16. Удобно выделять части матриц a = numpy.array ([[1, 2, 3], [4, 5, 6], [7, 8, 9]], "f")print a >>>[[ 1.  2.  3.] [ 4.  5.  6.] [ 7.  8.  9.]] tmp= a[:, 0]printtmp >>>[ 1.  4.  7.]tmp2 = a[0:2, 1:3]print tmp2 >>>[[ 2.  3.] [ 5.  6.]]# Так же работает присваиваниеa = numpy.zeros([3, 3], "f")print a >>>[[ 0.  0.  0.] [ 0.  0.  0.] [ 0.  0.  0.]]a[:, 0] = [n for n inrange(3)]print a >>>[[ 0.  0.  0.] [ 1.  0.  0.] [ 2.  0.  0.]]

  17. Интегрирование importscipy fromscipy.integrateimport quad defintegrand(t,n,x): return n*x*t defexpint(n,x): return quad(integrand, 1, 4, args=(n, x))[0] printexpint(2,1) >>> 15.0

  18. Оптимизация fromscipy.optimizeimportfmin defrosen(x): """The Rosenbrock function""" returnsum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0) x0 = [1.3, 0.7, 0.8, 1.9, 1.2] xopt = fmin(rosen, x0, xtol=1e-8) printxopt >>> Optimization terminated successfully. Current function value: 0.000000 Iterations: 339 Function evaluations: 571 [ 1. 1. 1. 1. 1.]

More Related