Математиката се занимава с огромен брой понятия, които са много важни, но в същото време сложни и отнемат много време. Въпреки това, предоставя пълноценната библиотека SciPy, която решава този проблем вместо нас. В този урок на SciPy ще научите как да използвате тази библиотека заедно с няколко функции и техните примери.
Преди да продължите, разгледайте всички теми, обсъдени в тази статия:
- Какво е SciPy?
- NumPy срещу SciPy
- Подпакети в SciPy
- Основни функции
- Специални функции
- Функции за интеграция
- Функции за оптимизация
- Функции на Фурие за преобразуване
- Функции за обработка на сигнали
- Линейна алгебра
- Разредени собствени стойности
- Структури на пространствени данни и алгоритми
- Функции за многоизмерна обработка на изображения
- Файл IO
Така че нека да започнем. :)
Какво е 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
Преди да разгледаме всяка от тези функции в детайли, нека първо разгледаме функциите, които са често срещани както в NumPy, така и в SciPy.
Основни функции:
Взаимодействие с NumPy:
SciPy се основава на NumPy и затова можете да използвате самите функции на NumPy за обработка на масиви. За да знаете задълбочено за тези функции, можете просто да използвате функциите help (), info () или source ().
помогне():
За да получите информация за която и да е функция, можете да използвате помогне() функция. Има два начина, по които тази функция може да се използва:
- без никакви параметри
- използвайки параметри
Ето пример, който показва и двата горни метода:
от scipy import клъстер помощ (клъстер) #with параметър help () #without параметър
Когато изпълните горния код, първата помощ () връща информацията за клъстер подмодул. Втората помощ () изисква от потребителя да въведе името на всеки модул, ключова дума и т.н., за които потребителят желае да търси информация. За да спрете изпълнението на тази функция, просто напишете ‘quit’ и натиснете enter.
информация ():
Тази функция връща информация за желаното , модули и др.
scipy.info (клъстер)
източник ():
Изходният код се връща само за обекти, записани в . Тази функция не връща полезна информация в случай, че методите или обектите са написани на който и да е друг език като C. Въпреки това, в случай че искате да използвате тази функция, можете да го направите, както следва:
scipy.source (клъстер)
Специални функции:
SciPy предоставя редица специални функции, които се използват в математическата физика като елиптични, удобни функции, гама, бета и др.За да потърсите всички функции, можете да използвате функцията help (), както е описано по-рано.
Експоненциални и тригонометрични функции:
Пакетът за специални функции на SciPy предоставя редица функции, чрез които можете да намерите експоненти и да решите тригонометрични задачи.
Обмислете следния пример:
ПРИМЕР:
от 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 предоставя функция с име четворна за изчисляване на интеграла на функция, която има една променлива. Границите могат да бъдат ± & infin(± инф
), за да се посочат безкрайни граници. Синтаксисът на функцията quad () е както следва:
СИНТАКСИС:
четворка (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, точки = Няма, тегло = Няма, wvar = Няма, wopts = Няма , maxp1 = 50, limlst = 50)
Тук функцията ще бъде интегрирана между границите a и b (може да бъде и безкрайна).
ПРИМЕР:
от scipy import special от 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 други променливи, които определят границите и функциите ди и dx.
ПРИМЕР:
от scipy import интегрирайте a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)
ИЗХОД:
-1,3333333333333335, 1,4802973661668755e-14)
SciPy предоставя различни други функции за оценка на тройни интеграли, n интеграли, интеграли Romberg и т.н., които можете да разгледате по-подробно. За да намерите всички подробности за необходимите функции, използвайте функцията за помощ.
Функции за оптимизация:
Scipy.optimize предоставя редица често използвани алгоритми за оптимизация, които могат да се видят с помощта на помощната функция.
Основно се състои от следното:
- Неограничено и ограничено минимизиране на многомерни скаларни функции, т.е. минимизиране (напр. BFGS, Newton Conjugate Gradient, Nelder_mead simplex и др.)
- Глобални процедури за оптимизация (напр. Diferencial_evolution, dual_annealing и т.н.)
- Минимизиране на най-малките квадрати и приспособяване на кривата (напр. Най-малките квадрати, кривата_подобност и т.н.)
- Скалиращи едномерни функции минимизатори и коренови търсачи (напр. Minimize_scalar и root_scalar)
- Решители на многовариантни уравнения, използващи алгоритми като хибридни Powell, Levenberg-Marquardt.
Функция на Розенбрук:
Функция на Розенбрук ( росен ) е тестов проблем, използван за алгоритми за оптимизация, базирани на градиент. Той се определя, както следва в SciPy:
ПРИМЕР:
импортиране на numpy като np от scipy.optimize импортиране rosen a = 1.2 * np.arange (5) rosen (a)
ИЗХОД: 7371.0399999999945
Нелдер-Мийд:
TheНелдер–Mead методът е числов метод, често използван за намиране на min / max на функция в многомерно пространство. В следващия пример се използва методът за минимизиране заедно с алгоритъма на Nelder-Mead.
ПРИМЕР:
от 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 функция, която може да се използва за създаване на едномерна интерполация.
ПРИМЕР:
импортиране matplotlib.pyplot като plt от scipy импортиране 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 функция.
Интерполирането през 2-D решетка с помощта на функцията interp2d (x, y, z) основно ще използва масиви x, y, z за приближаване на някаква функция f: „z = f (x, y)“ и връща функция, чийто метод на повикване използва сплайн интерполация за да намерите стойността на новите точки.
ПРИМЕР:
от 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 = 'кубичен') 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 ()
ИЗХОД:
Функции за преобразуване на Фурие:
Анализът на Фурие е метод, който се занимава с изразяване на функция като сбор от периодични компоненти и възстановяване на сигнала от тези компоненти. The fft функции могат да се използват за връщане надискретно преобразуване на Фурие на реална или сложна последователност.
ПРИМЕР:
от scipy.fftpack импортиране 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]
По същия начин можете да намерите обратното на това, като използвате ifft функционират както следва:
ПРИМЕР:
rom scipy.fftpack импортиране 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 предоставя някои функции, с помощта на които можете да проектирате, филтрирате и интерполирате едномерни и двуизмерни данни.
Филтриране:
Като филтрирате сигнал, вие основно премахвате нежеланите компоненти от него. За да извършите подредено филтриране, можете да използвате филтър за поръчка функция. Тази функция основно изпълнява подредено филтриране върху масив. Синтаксисът на тази функция е следният:
СИНТАКСИС:
филтър за поръчка (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.]
[петнадесет. 16. 17. 18. 13.]
[двадесет. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]
Вълнови форми:
Подпакетът scipy.signal също се състои от различни функции, които могат да се използват за генериране на вълнови форми. Една такава функция е чуруликане . Тази функция е fгенератор на косинус с честота и синтаксисът е както следва:
СИНТАКСИС:
чуруликане (t, f0, t1, f1, метод = ’линеен’, 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 ('time in sec)') plt.show ()
ИЗХОД:
Линейна алгебра:
Линейната алгебра се занимава с линейни уравнения и техните представяния, използвайки векторни пространства и матрици. SciPy е изграден върхуATLAS LAPACK и BLAS библиотеки и еизключително бързо при решаване на задачи, свързани с линейна алгебра. В допълнение към всички функции от numpy.linalg, scipy.linalg предлага и редица други разширени функции. Също така, ако numpy.linalg не се използва заедно сПоддръжка на ATLAS LAPACK и BLAS, scipy.linalg е по-бърза от numpy.linalg.
Намиране на обратното на матрица:
Математически обратното на матрица Aе матрицатаБ.такъв, чеAB = IкъдетоАзе матрицата за идентичност, състояща се от единици надолу по главния диагонал, обозначени катоB = A-един. В SciPy тази обратна може да се получи с помощта на linalg.inv метод.
ПРИМЕР:
импортиране на numpy като np от scipy импортиране 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) е квадратна матрица
overwrite_a (bool, по избор): Разрешаване на презаписване на данни в
check_finite (bool, по избор): За да проверите дали входната матрица се състои само от крайни числа
ПРИМЕР:
импортиране на numpy като np от scipy импортиране 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 интерфейсът ви позволява да намерите собствените стойности на реални или сложни несиметрични квадратни матрици, докато eigsh интерфейсът съдържа интерфейси за реално симетрични или сложно-ермитови матрици.
The осем функция решава обобщен проблем със собствена стойност за сложна ермитова или реална симетрична матрица.
ПРИМЕР:
от 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 = осем (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 (точки) #Delaunay обект print (a) print (a.simplices) plt.triplot (точки [:, 0], точки [:, 1], a.simplices) plt.plot (точки [:, 1], точки [:, 0], 'o') plt.show ()
ИЗХОД:
Функции за многоизмерна обработка на изображения:
Обработката на изображения основно се занимава с извършване на операции върху изображение за извличане на информация или за получаване на подобрено изображение от оригиналното. Пакетът scipy.ndimage се състои от редицафункции за обработка и анализ на изображения, предназначени за работа с масиви с произволна размерност.
Свиване и корелация:
SciPy предоставя редица функции, които позволяват корелация и конволюция на изображения.
- Функцията корелирам1d може да се използва за изчисляване на едномерна корелация по дадена ос
- Функцията корелират позволява многоизмерна корелация на всеки даден масив с посоченото ядро
- Функцията convolve1d може да се използва за изчисляване на едномерна конволюция по дадена ос
- Функцията свивам се позволява многоизмерна конволюция на всеки даден масив с посоченото ядро
ПРИМЕР:
импортиране на numpy като np от scipy.ndimage импортиране correlate1d correlate1d ([3,5,1,7,2,6,9,4], тегла = [1,2])
ИЗХОД: масив ([9, 13, 7, 15, 11, 14, 24, 17])
IO файл:
Пакетът scipy.io предоставя редица функции, които ви помагат да управлявате файлове от различни формати като MATLAB файлове, IDL файлове, файлове на Matrix Market и др.
За да използвате този пакет, ще трябва да го импортирате, както следва:
импортирайте scipy.io като sio
За пълна информация относно подпакета можете да се обърнете към официалния документ на Файл IO .
Това ни води до края на този урок за SciPy. Надявам се, че сте разбрали всичко ясно. Уверете се, че практикувате възможно най-много .
Имате въпрос към нас? Моля, споменете го в раздела за коментари в този блог „Урок на SciPy“ и ние ще се свържем с вас възможно най-скоро.
За да получите задълбочени познания за Python заедно с различните му приложения, можете да се регистрирате за живо с 24/7 поддръжка и доживотен достъп.