Учебник SciPy: что такое Python SciPy и как его использовать?



SciPy - это библиотека Python, используемая для решения научных и математических задач. NumPy против SciPy. Базовый, специальный, интеграция, оптимизация и т. Д. С примерами.

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

Прежде чем двигаться дальше, взгляните на все темы, обсуждаемые в этой статье:





Итак, приступим. :)

Что такое SciPy?

SciPy - это библиотека Python с открытым исходным кодом, которая используется для решения научных и математических задач. Он построен на расширение и позволяет пользователю управлять и визуализировать данные с помощью широкого набора команд высокого уровня. Как упоминалось ранее, SciPy основан на NumPy, и поэтому, если вы импортируете SciPy, нет необходимости импортировать NumPy.



NumPy против SciPy

И NumPy, и SciPy являются Используется для математического и численного анализа. NumPy содержит данные массива и основные операции, такие как сортировка, индексация и т. Д., Тогда как SciPy состоит из всего числового кода. Хотя NumPy предоставляет ряд которая может помочь решить линейную алгебру, преобразования Фурье и т. д., SciPy - это библиотека, которая фактически содержит полнофункциональные версии этих функций, а также многие другие. Однако, если вы выполняете научный анализ с использованием Python, вам необходимо установить как NumPy, так и SciPy, поскольку SciPy строится на NumPy.

Подпакеты в SciPy:

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

имяОписание
кластерАлгоритмы кластеризации
константыФизико-математические константы
fftpackПроцедуры быстрого преобразования Фурье
интегрироватьИнтегрирование и решение обыкновенных дифференциальных уравнений
интерполироватьСплайны интерполяции и сглаживания
яВход и выход
линалгЛинейная алгебра
я летаюN-мерная обработка изображений
odrОртогональная дистанционная регрессия
оптимизироватьПроцедуры оптимизации и поиска корней
сигналОбработка сигнала
редкийРазреженные матрицы и связанные процедуры
пространственныйСтруктуры и алгоритмы пространственных данных
особыйСпециальные функции
статистикаСтатистические распределения и функции

Однако для подробного описания вы можете следовать официальная документация .



Эти пакеты необходимо импортировать исключительно перед их использованием. Например:

из scipy import cluster

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

Основные функции:

Взаимодействие с NumPy:

SciPy основан на NumPy, поэтому вы можете использовать сами функции NumPy для обработки массивов. Чтобы узнать больше об этих функциях, вы можете просто использовать функции help (), info () или source ().

Помогите():

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

что такое бинарный поиск в Java
  • без параметров
  • используя параметры

Вот пример, демонстрирующий оба вышеуказанных метода:

from scipy import cluster help (cluster) # с параметром help () # без параметра

Когда вы выполняете приведенный выше код, первая help () возвращает информацию о кластер подмодуль. Вторая help () просит пользователя ввести имя любого модуля, ключевого слова и т. Д., Для которых пользователь желает искать информацию. Чтобы остановить выполнение этой функции, просто введите «quit» и нажмите Enter.

Информация():

Эта функция возвращает информацию о желаемом , модули и т. д.

scipy.info (кластер)

источник():

Исходный код возвращается только для объектов, написанных на . Эта функция не возвращает полезную информацию, если методы или объекты написаны на любом другом языке, например C. Однако, если вы хотите использовать эту функцию, вы можете сделать это следующим образом:

scipy.source (кластер)

Специальные функции:

SciPy предоставляет ряд специальных функций, которые используются в математической физике, таких как эллиптические, удобные функции, гамма, бета и т. д.Чтобы найти все функции, вы можете использовать функцию help (), как описано ранее.

Экспоненциальные и тригонометрические функции:

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

Рассмотрим следующий пример:

ПРИМЕР:

from scipy import special a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( г)

ВЫВОД:

1000,0
8.0
1.0
0,7071067811865475

В пакете специальных функций SciPy есть много других функций, которые вы можете попробовать сами.

Функции интеграции:

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

Общая интеграция:

SiPy предоставляет функцию с именем четырехъядерный для вычисления интеграла от функции с одной переменной. Пределы могут быть ± и бесконечность(± инф), чтобы указать бесконечные пределы. Синтаксис функции quad () следующий:

СИНТАКСИС:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, points = None, weight = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

Здесь функция будет интегрирована между пределами a и b (также может быть бесконечной).

ПРИМЕР:

из scipy import special from scipy import интегрировать a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

В приведенном выше примере функция ‘a’ оценивается в пределах 0, 1. Когда этот код выполняется, вы увидите следующий результат.

ВЫВОД:

(3.9086503371292665, 4.3394735994897923e-14)

Функция двойного интеграла:

SciPy предоставляет dblquad который можно использовать для вычисления двойных интегралов. Двойной интеграл, как известно многим из нас, состоит из двух действительных переменных. Функция dblquad () примет функцию, которую нужно интегрировать, в качестве параметра вместе с 4 другими переменными, которые определяют пределы и функции. dy и dx.

ПРИМЕР:

из scipy import интегрировать a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 интегрировать.dblquad (a, 0, 2, b, c)

ВЫВОД:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy предоставляет различные другие функции для вычисления тройных интегралов, n интегралов, интегралов Ромберга и т. Д., Которые вы можете изучить подробнее. Чтобы найти все подробности о необходимых функциях, используйте функцию справки.

Функции оптимизации:

Scipy.optimize предоставляет ряд часто используемых алгоритмов оптимизации, которые можно увидеть с помощью функции справки.

В основном он состоит из следующего:

  • Неограниченная и ограниченная минимизация многомерных скалярных функций, т.е. свести к минимуму (например, BFGS, Newton Conjugate Gradient, Nelder_mead simplex и т. д.)
  • Процедуры глобальной оптимизации (например, дифференциальная эволюция, двойное отжигание и т. Д.)
  • Минимизация методом наименьших квадратов и аппроксимация кривой (например, наименьшие квадраты, подгонка кривой и т.
  • Минимизаторы скалярных одномерных функций и средства поиска корня (например, minim_scalar и root_scalar)
  • Решатели многомерных систем уравнений с использованием таких алгоритмов, как гибридные алгоритмы Пауэлла, Левенберга-Марквардта.

Функция Розенбрука:

Функция Розенбрука ( Розен ) - тестовая задача, используемая для алгоритмов оптимизации на основе градиента. В SciPy это определяется следующим образом:

rosen-Scipy учебник-edurekaПРИМЕР:

импортировать numpy как np из scipy.optimize import rosen a = 1.2 * np.arange (5) rosen (a)

ВЫВОД: 7371.0399999999945

Нелдер-Мид:

ВNelder–Метод Мид - это численный метод, часто используемый для нахождения минимума / максимума функции в многомерном пространстве. В следующем примере метод минимизации используется вместе с алгоритмом Нелдера-Мида.

ПРИМЕР:

из scipy import optimize a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

ВЫВОД: массив ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])

Функции интерполяции:

В области численного анализа под интерполяцией понимается построение новых точек данных в наборе известных точек данных. Библиотека SciPy состоит из подпакета scipy.interpolate, который состоит изсплайн-функции и классы, одномерные и многомерные (одномерные и многомерные) классы интерполяции и т. д.

Одномерная интерполяция:

Одномерная интерполяция - это, по сути, область аппроксимации кривой, котораянаходит кривую, которая точно соответствует серии двумерных точек данных. SciPy предоставляет interp1d функция, которую можно использовать для одномерной интерполяции.

ПРИМЕР:

преобразовать дату строки в дату в Java
импортировать matplotlib.pyplot как plt из scipy import interpolate x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # использовать функцию интерполяции, возвращаемую `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

ВЫВОД:

Многомерная интерполяция:

Многомерная интерполяция(пространственныйинтерполяция) видинтерполяцияна функциях, которые состоят из более чем одной переменной. В следующем примере демонстрируется пример interp2d функция.
Интерполяция по двумерной сетке с использованием функции interp2d (x, y, z) в основном будет использовать массивы x, y, z для аппроксимации некоторой функции f: «z = f (x, y)» и возвращает функцию, метод вызова которой использует сплайн-интерполяция чтобы узнать стоимость новых очков.
ПРИМЕР:

from scipy import interpolate import matplotlib.pyplot as plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'cubic') x2 = np.arange (2,8) y2 = np.arange (15,20) z2 = f (xnew, ynew) plt. plot (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

ВЫВОД:

Функции преобразования Фурье:

Анализ Фурье - это метод, который имеет дело с выражением функции в виде суммы периодических компонентов и восстановлением сигнала из этих компонентов. В fft функции могут использоваться для возвратадискретное преобразование Фурье действительной или комплексной последовательности.

ПРИМЕР:

из scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)

ВЫВОД: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Точно так же вы можете найти обратное, используя если функционируют следующим образом:

ПРИМЕР:

rom scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)

ВЫВОД: [1,5 + 0.j -0,5-0,5j -0,5 + 0.j -0,5 + 0,5j]

Функции обработки сигналов:

Обработка сигналов связана санализ, изменение и синтез сигналов, таких как звук, изображения и т. д. SciPy предоставляет некоторые функции, с помощью которых вы можете проектировать, фильтровать и интерполировать одномерные и двумерные данные.

Фильтрация:

Фильтруя сигнал, вы в основном удаляете из него нежелательные компоненты. Для выполнения упорядоченной фильтрации вы можете использовать order_filter функция. Эта функция в основном выполняет упорядоченную фильтрацию массива. Синтаксис этой функции следующий:

СИНТАКСИС:
order_filter (a, домен, ранг)

a = N-мерный входной массив

domain = массив масок, имеющий такое же количество измерений, как `a`

rank = неотрицательное число, которое выбирает элементы из списка после того, как он был отсортирован (0 - самый маленький, за которым следует 1…)

ПРИМЕР:

из сигнала импорта scipy x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))

ВЫВОД:

[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]]

[[0. 1. 2. 3. 0.]
[5. 6. 7. 8. 3.]
[10. 11. 12. 13. 8.]
[15. 16. 17. 18. 13.]
[двадцать. 21. 22. 23. 18.]
[25. 26,27,28,23]
[0. 25, 26, 27, 28.]]

Формы волны:

Подпакет scipy.signal также состоит из различных функций, которые можно использовать для генерации сигналов. Одна из таких функций - щебетать . Эта функция является fГенератор косинусов с разверткой по запросу и его синтаксис следующие:

СИНТАКСИС:
chirp (t, f0, t1, f1, method = ’linear’, phi = 0, vertex_zero = True)

где,

ПРИМЕР:

из scipy.signal импортировать chirp, спектрограмму импортировать matplotlib.pyplot как plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, method = 'linear') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('время в секундах)') plt.show ()

ВЫВОД:

Линейная алгебра:

Линейная алгебра имеет дело с линейными уравнениями и их представлениями с использованием векторных пространств и матриц. SciPy построен наБиблиотеки ATLAS LAPACK и BLAS ичрезвычайно быстро решает задачи, связанные с линейной алгеброй. В дополнение ко всем функциям из numpy.linalg, scipy.linalg также предоставляет ряд других расширенных функций. Кроме того, если numpy.linalg не используется вместе сПоддержка ATLAS LAPACK и BLAS, scipy.linalg быстрее, чем numpy.linalg.

Нахождение обратной матрицы:

Математически обратная матрица AматрицаBтакой, чтоAB = Iгдея- единичная матрица, состоящая из единиц по главной диагонали, обозначенная какВ = А-один. В SciPy это обратное можно получить с помощью linalg.inv метод.

ПРИМЕР:

импортировать numpy как np из scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)

ВЫВОД:

[[-0,6 0,4]
[0,8 -0,2]]

Поиск детерминант:

Значение, полученное арифметическим способом из коэффициентов матрицы, известно как определитель квадратной матрицы. В SciPy это можно сделать с помощью функции в который имеет следующий синтаксис:

СИНТАКСИС:
det (a, overwrite_a = False, check_finite = True)
где,

a: (M, M) - квадратная матрица

trim () в Java

overwrite_a (bool, необязательно): разрешить перезапись данных в

check_finite (bool, необязательно): чтобы проверить, состоит ли матрица ввода только из конечных чисел

ПРИМЕР:

импортировать numpy как np из scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

ВЫВОД: -5,0

Редкие собственные значения:

Собственные значения - это определенный набор скаляров, связанных с линейными уравнениями. ARPACK позволяет довольно быстро находить собственные значения (собственные векторы). Полная функциональность ARPACK упакована вдва высокоуровневых интерфейса: scipy.sparse.linalg.eigs и scipy.sparse.linalg.eigsh. eigs. Интерфейс eigs позволяет вам находить собственные значения действительных или комплексных несимметричных квадратных матриц, тогда как интерфейс eigsh содержит интерфейсы для вещественно-симметричных или комплексно-эрмитовых матриц.

В восемь Функция решает обобщенную проблему собственных значений для комплексной эрмитовой или вещественной симметричной матрицы.

ПРИМЕР:

из scipy.linalg импортируйте восемь импортируемых numpy как np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = 8 (A) print ('Выбранные собственные значения:', a) print ('Комплексный ndarray:', b)

ВЫВОД:

Выбранные собственные значения: [-2,53382695 1,66735639 3,69488657 12,17158399]
Комплексный ndarray: [[0,69205614 0,5829305 0,25682823 -0,33954321]
[-0,68277875 0,46838936 0,03700454 -0,5595134]
[0,23275694 -0,29164622 -0,72710245 -0,57627139]
[0,02637572 -0,59644441 0,63560361 -0,48945525]]

Структуры и алгоритмы пространственных данных:

Пространственные данные в основном состоят из объектов, состоящих из линий, точек, поверхностей и т. Д. Пакет scipy.spatial SciPy может вычислятьДиаграммы Вороного, триангуляции и т. Д. С использованием библиотеки Qhull. Он также состоит из реализаций KDTree для запросов точки ближайшего соседа.

Триангуляции Делоне:

Математически триангуляции Делоне для набора дискретных точек на плоскости - это такая триангуляция, что ни одна точка в данном наборе точек не являетсявнутри описанной окружности любого треугольника.

ПРИМЕР:

импортировать matplotlib.pyplot как plt из scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (points) #Delaunay объект print (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'о') plt.show ()

ВЫВОД:

Функции обработки многомерных изображений:

Обработка изображений в основном связана с выполнением операций с изображением для извлечения информации или получения улучшенного изображения из исходного. Пакет scipy.ndimage состоит из несколькихфункции обработки и анализа изображений, предназначенные для работы с массивами произвольной размерности.

Свертка и корреляция:

SciPy предоставляет ряд функций, которые позволяют корреляцию и свертку изображений.

  • Функция correlate1d может использоваться для расчета одномерной корреляции вдоль заданной оси
  • Функция соотносить позволяет многомерную корреляцию любого заданного массива с указанным ядром
  • Функция convolve1d может использоваться для вычисления одномерной свертки по заданной оси
  • Функция сворачивать позволяет многомерную свертку любого заданного массива с указанным ядром

ПРИМЕР:

импортировать numpy как np из scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], weights = [1,2])

ВЫВОД: массив ([9, 13, 7, 15, 11, 14, 24, 17])

IO файл:

Пакет scipy.io предоставляет ряд функций, которые помогут вам управлять файлами различных форматов, такими как файлы MATLAB, файлы IDL, файлы Matrix Market и т. Д.

Чтобы использовать этот пакет, вам необходимо импортировать его следующим образом:

импортировать scipy.io как sio

Для получения полной информации о подпакете вы можете обратиться к официальному документу на Файл IO .

На этом мы подошли к концу этого учебника SciPy. Надеюсь, вы все ясно поняли. Убедитесь, что вы тренируетесь как можно больше .

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога «SciPy Tutorial», и мы свяжемся с вами как можно скорее.

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