Les matemàtiques tracten una gran quantitat de conceptes molt importants, però alhora complexos i que requereixen molt de temps. Malgrat això, proporciona la completa biblioteca SciPy que ens resol aquest problema. En aquest tutorial de SciPy, aprendreu a fer ús d’aquesta biblioteca juntament amb algunes funcions i els seus exemples.
utilitzant r per a l’aprenentatge automàtic
Abans de continuar, mireu tots els temes tractats en aquest article:
- Què és SciPy?
- NumPy vs SciPy
- Subpaquets a SciPy
- Funcions bàsiques
- Funcions especials
- Funcions d’integració
- Funcions d’optimització
- Funcions de transformada de Fourier
- Funcions de processament de senyals
- Àlgebra linial
- Valors propis escassos
- Algoritmes i estructures de dades espacials
- Funcions de processament d'imatges multidimensionals
- Arxiu IO
Comencem doncs. :)
Què és SciPy?
SciPy és una biblioteca Python de codi obert que s'utilitza per resoldre problemes científics i matemàtics. Està construït sobre el extensió i permet a l'usuari manipular i visualitzar dades amb una àmplia gamma d'ordres d'alt nivell. Com es va esmentar anteriorment, SciPy es basa en NumPy i, per tant, si importeu SciPy, no cal importar NumPy.
NumPy vs SciPy
Tant NumPy com SciPy ho són s'utilitza per a l'anàlisi matemàtica i numèrica. NumPy conté dades de matriu i operacions bàsiques com ara classificació, indexació, etc. mentre que SciPy consta de tot el codi numèric. Tot i que NumPy proporciona una sèrie de que pot ajudar a resoldre àlgebra lineal, transformades de Fourier, etc., SciPy és la biblioteca que conté versions completament funcionals d'aquestes funcions juntament amb moltes altres. Tot i això, si feu anàlisis científiques amb Python, haureu d’instal·lar NumPy i SciPy ja que SciPy es basa en NumPy.
Subpaquets a SciPy:
SciPy té una sèrie de paquets secundaris per a diversos càlculs científics que es mostren a la taula següent:
Nom | Descripció |
cúmul | Algorismes de clusterització |
constants | Constants físiques i matemàtiques |
fftpack | Rutines de transformada ràpida de Fourier |
integrar | Solucions d’equacions diferencials ordinàries i d’integració |
interpolar | Interpolació i suavització de splines |
Jo | Entrada i sortida |
linalg | Àlgebra linial |
Volo | Processament d'imatges en dimensions N |
odr | Regressió ortogonal a distància |
optimitzar | Rutines d’optimització i de recerca d’arrels |
senyal | Processament de senyals |
escassa | Matrius escasses i rutines associades |
espacial | Algoritmes i estructures de dades espacials |
especial | Funcions especials |
estadístiques | Distribucions i funcions estadístiques |
Tanmateix, per obtenir una descripció detallada, podeu seguir el document documentació oficial .
Aquests paquets s’han d’importar exclusivament abans d’utilitzar-los. Per exemple:
del clúster d'importació de scipy
Abans d’examinar detalladament cadascuna d’aquestes funcions, primer fem una ullada a les funcions habituals tant a NumPy com a SciPy.
Funcions bàsiques:
Interacció amb NumPy:
SciPy es basa en NumPy i, per tant, podeu fer ús de les funcions NumPy per gestionar matrius. Per conèixer a fons aquestes funcions, podeu fer servir ajuda (), informació () o fonts ().
help ():
Per obtenir informació sobre qualsevol funció, podeu fer servir el fitxer ajudar () funció. Hi ha dues maneres en què es pot utilitzar aquesta funció:
- sense cap paràmetre
- utilitzant paràmetres
Aquí teniu un exemple que mostra els dos mètodes anteriors:
des de la importació de clúster scipy help (clúster) #with paràmetre help () # sense paràmetre
Quan executeu el codi anterior, el primer help () retorna la informació sobre el fitxer cúmul submòdul. La segona ajuda () demana a l'usuari que introdueixi el nom de qualsevol mòdul, paraula clau, etc. per a la qual vulgui obtenir informació. Per aturar l'execució d'aquesta funció, només cal que escriviu 'quit' i premeu Intro.
info ():
Aquesta funció retorna informació sobre el desitjat , mòduls, etc.
scipy.info (clúster)
font ():
El codi font només es retorna per als objectes escrits . Aquesta funció no retorna informació útil en cas que els mètodes o objectes estiguin escrits en qualsevol altre idioma com ara C. No obstant això, en cas que vulgueu fer servir aquesta funció, podeu fer-ho de la següent manera:
scipy.source (clúster)
Funcions especials:
SciPy proporciona una sèrie de funcions especials que s’utilitzen en física matemàtica, com ara l’el·líptica, funcions de comoditat, gamma, beta, etc.Per buscar totes les funcions, podeu fer servir la funció help () tal com es va descriure anteriorment.
Funcions exponencials i trigonomètriques:
El paquet de funcions especials de SciPy proporciona una sèrie de funcions mitjançant les quals podeu trobar exponents i resoldre problemes trigonomètrics.
Penseu en el següent exemple:
EXEMPLE:
des de la importació de scipy especial a = especial.exp10 (3) imprimir (a) b = especial.exp2 (3) imprimir (b) c = especial.sindg (90) imprimir (c) d = especial.cosdg (45) imprimir ( d)
SORTIDA:
1000.0
8.0
1.0
,7071067811865475
Hi ha moltes altres funcions presents al paquet de funcions especials de SciPy que podeu provar per vosaltres mateixos.
Funcions d'integració:
SciPy proporciona una sèrie de funcions per resoldre integrals. Des de l’integrador diferencial ordinari fins a l’ús de regles trapezoïdals per calcular integrals, SciPy és un magatzem de funcions per resoldre tot tipus de problemes d’integrals.
Integració general:
SiPy proporciona una funció anomenada quad per calcular la integral d'una funció que té una variable. Els límits poden ser ± & infin(± inf
) per indicar límits infinits. La sintaxi de la funció quad () és la següent:
SINTAXI:
quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, límit = 50, punts = Cap, pes = Cap, wvar = Cap, wopts = Cap , maxp1 = 50, limlst = 50)
Aquí, la funció s'integrarà entre els límits a i b (també pot ser infinit).
EXEMPLE:
from scipy import special from scipy import integrate a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)
A l’exemple anterior, la funció ‘a’ s’avalua entre els límits 0, 1. Quan s’executa aquest codi, veureu la sortida següent.
SORTIDA:
(3.9086503371292665, 4.3394735994897923e-14)
Doble funció integral:
SciPy proporciona dblquad que es pot utilitzar per calcular integrals dobles. Una doble integral, com molts sabem, consta de dues variables reals. La funció dblquad () prendrà la funció que s'integra com a paràmetre juntament amb altres 4 variables que defineixen els límits i les funcions dy i dx.
EXEMPLE:
des de la importació de scipy integrate a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)
SORTIDA:
-1.3333333333333335, 1.4802973661668755e-14)
SciPy proporciona diverses altres funcions per avaluar integrals triples, integrals n, integrals Romberg, etc. que podeu explorar amb més detall. Per trobar tots els detalls sobre les funcions necessàries, utilitzeu la funció d’ajuda.
Funcions d'optimització:
Scipy.optimize proporciona una sèrie d’algoritmes d’optimització d’ús habitual que es poden veure mitjançant la funció d’ajuda.
Bàsicament consisteix en el següent:
- Minimització sense restriccions i restriccions de funcions escalars multivariants, és a dir minimitzar (per exemple, BFGS, Newton Conjugate Gradient, Nelder_mead simplex, etc.)
- Rutines d’optimització global (per exemple, evolució_diferencial, reconeixement_doble, etc.)
- Minimització dels mínims quadrats i ajustament de la corba (per exemple, minimum_squares, curve_fit, etc.)
- Minimitzadors de funcions univariables escalar i cercadors d'arrels (per exemple, minimitzar_escalar i arrel_escalar)
- Solucionadors de sistemes d’equacions multivariants que utilitzen algoritmes com Powell híbrid, Levenberg-Marquardt.
Funció de Rosenbrook:
Funció Rosenbrook ( rosen ) és un problema de prova utilitzat per a algorismes d’optimització basats en gradients. Es defineix de la següent manera a SciPy:
EXEMPLE:
import numpy as np from scipy.optimize import rosen a = 1,2 * np.arange (5) rosen (a)
SORTIDA: 7371.0399999999945
Nelder-Mead:
ElNelder–El mètode Mead és un mètode numèric que s’utilitza sovint per trobar el mínim / màxim d’una funció en un espai multidimensional. A l'exemple següent, s'utilitza el mètode de minimització juntament amb l'algorisme Nelder-Mead.
EXEMPLE:
des de la importació de scipy optimize a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x
SORTIDA: matriu ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])
Funcions d'interpolació:
En el camp de l’anàlisi numèrica, la interpolació es refereix a la construcció de nous punts de dades dins d’un conjunt de punts de dades coneguts. La biblioteca SciPy consisteix en un subpaquet anomenat scipy.interpolate que consta defuncions i classes de spline, classes d’interpolació unidimensionals i multidimensionals (univariants i multivariants), etc.
Interpolació univariant:
La interpolació univariant és bàsicament una àrea d’ajustament de corbes quetroba la corba que proporciona un ajustament exacte a una sèrie de punts de dades bidimensionals. SciPy proporciona interp1d funció que es pot utilitzar per produir interpolació univariant.
EXEMPLE:
import matplotlib.pyplot as plt from 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) # utilitza la funció d'interpolació retornada per `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()
SORTIDA:
Interpolació multivariant:
Interpolació multivariant(espacialinterpolació) és una espècieinterpolaciósobre funcions que consisteixen en més d'una variable. L'exemple següent mostra un exemple de interp2d funció.
Interpolant sobre una quadrícula 2-D mitjançant la funció interp2d (x, y, z) bàsicament s’utilitzaran matrius x, y, z per aproximar alguna funció f: 'z = f (x, y)' i retorna una funció que utilitza el mètode de trucada interpolació spline per trobar el valor dels punts nous.
EXEMPLE:
des de la importació de scipy interpola la importació matplotlib.pyplot com plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolar.interp2d (x, y, z, kind = 'cúbic') 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 ()
SORTIDA:
Funcions de transformada de Fourier:
L’anàlisi de Fourier és un mètode que tracta d’expressar una funció com una suma de components periòdics i recuperar el senyal d’aquests components. El peus es poden utilitzar funcions per retornar el fitxertransformada de Fourier discreta d'una seqüència real o complexa.
EXEMPLE:
des de scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)
SORTIDA: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]
De la mateixa manera, podeu trobar la inversa d’aquest mitjançant l’ús de ift funciona de la següent manera:
EXEMPLE:
rom scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)
SORTIDA: [1,5 + 0j -0,5-0,5j -0,5 + 0j -0,5 + 0,5j]
Funcions de processament de senyal:
Tractament del senyalanalitzar, modificar i sintetitzar senyals com el so, les imatges, etc. SciPy proporciona algunes funcions que permeten dissenyar, filtrar i interpolar dades unidimensionals i bidimensionals.
Filtratge:
En filtrar un senyal, bàsicament n'elimineu components no desitjats. Per realitzar un filtrat ordenat, podeu fer servir el fitxer filtre_ordre funció. Aquesta funció bàsicament realitza un filtrat ordenat en una matriu. La sintaxi d'aquesta funció és la següent:
SINTAXI:
order_filter (a, domini, rang)
a = matriu d'entrada N-dimensional
domain = matriu de màscares que té el mateix nombre de dimensions que `a`
rank = Nombre no negatiu que selecciona elements de la llista després d'haver estat ordenada (0 és el més petit seguit d'1 ...)
EXEMPLE:
des del senyal d'importació de xipy x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))
SORTIDA:
[[0 1 2 3 4]
[5 6 7 8 set]
[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.]
[20. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]
Formes d'ona:
El subpaquet scipy.signal també consta de diverses funcions que es poden utilitzar per generar formes d'ona. Una d’aquestes funcions és xisclar . Aquesta funció és fgenerador de cosinus escombrat per requisits i la sintaxi és la següent:
SINTAXI:
xisclar (t, f0, t1, f1, method = 'lineal', phi = 0, vertex_zero = True)
on,
EXEMPLE:
des de scipy.signal import chirp, espectrogram import matplotlib.pyplot as 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 ('temps en segons)') plt.show ()
SORTIDA:
Àlgebra linial:
L’àlgebra lineal tracta les equacions lineals i les seves representacions mitjançant espais i matrius vectorials. Es basa en SciPyATLAS LAPACK i les biblioteques BLAS i ésextremadament ràpid en la resolució de problemes relacionats amb l'àlgebra lineal. A més de totes les funcions de numpy.linalg, scipy.linalg també proporciona una sèrie d’altres funcions avançades. A més, si numpy.linalg no s'utilitza juntament ambATLAS LAPACK i BLAS admeten, scipy.linalg és més ràpid que numpy.linalg.
Trobar la inversa d'una matriu:
Matemàticament, la inversa d’una matriu Aés la matriuBde tal manera queAB = joonJoés la matriu d'identitat que consisteix en uns que es troben a la diagonal principal denotats comB = A-1. A SciPy, aquesta inversa es pot obtenir utilitzant el fitxer linalg.inv mètode.
EXEMPLE:
importar numpy com np des de scipy importar linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) imprimir (B)
SORTIDA:
[[-0.6 0.4]
[0.8 -0.2]]
Trobar els determinants:
El valor derivat aritmèticament dels coeficients de la matriu es coneix com el determinant d’una matriu quadrada. A SciPy, això es pot fer mitjançant una funció el que té la sintaxi següent:
SINTAXI:
det (a, overwrite_a = False, check_finite = True)
on,
a: (M, M) És una matriu quadrada
overwrite_a (bool, opcional): permet sobreescriure dades a
check_finite (bool, opcional): per comprovar si la matriu d'entrada només consta de nombres finits
EXEMPLE:
importar numpy com np des de scipy importar linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) imprimir (B)
SORTIDA: -5.0
Valors propis escassos:
Els valors propis són un conjunt específic d’escalars vinculats amb equacions lineals. El ARPACK proporciona que us permetrà trobar valors propis (vectors propis) força ràpidament. La funcionalitat completa d'ARPACK està inclosa dinsdues interfícies d'alt nivell que són scipy.sparse.linalg.eigs i scipy.sparse.linalg.eigsh. eigs. La interfície eigs us permet trobar els valors propis de matrius quadrades no simètriques reals o complexes, mentre que la interfície eigsh conté interfícies per a matrius simètriques reals o complexes hermities.
El vuit La funció resol un problema de valor propi generalitzat per a una matriu hermètica complexa o simètrica real.
EXEMPLE:
de scipy.linalg import eigh import numpy as np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = eigh (A) print ('Valors propis seleccionats:', a) print ('Matriu complexa', b)
SORTIDA:
Valors propis seleccionats: [-2.53382695 1.66735639 3.69488657 12.17158399]
Ndarray complex: [[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]]
Algoritmes i estructures de dades espacials:
Les dades espacials consisteixen bàsicament en objectes formats per línies, punts, superfícies, etc. El paquet scipy.spatial de SciPy pot calcularDiagrames de Voronoi, triangulacions, etc. mitjançant la biblioteca Qhull. També consisteix en implementacions de KDTree per a consultes de punts del veí més proper.
Triangulacions de Delaunay:
Matemàticament, les triangulacions de Delaunay per a un conjunt de punts discrets en un pla és una triangulació tal que cap punt del conjunt de punts donat ésdins de la circumferència circumscrita de qualsevol triangle.
EXEMPLE:
import matplotlib.pyplot as plt from scipy.spatial import points Delaunay = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (punts) #Delaunay object print (a) print (a.simplices) plt.triplot (punts [:, 0], punts [:, 1], a.simplices) plt.plot (punts [:, 1], points [:, 0], 'o') plt.show ()
SORTIDA:
què és la gestió de la contractació de projectes
Funcions de processament d'imatges multidimensionals:
El processament d'imatges tracta bàsicament de realitzar operacions en una imatge per recuperar informació o obtenir una imatge millorada de la original. El paquet scipy.ndimage consta de diversos fitxersfuncions de processament i anàlisi d’imatges dissenyades per treballar amb matrius de dimensionalitat arbitrària.
Convolució i correlació:
SciPy proporciona una sèrie de funcions que permeten la correlació i la convolució de les imatges.
- La funció correlate1d es pot utilitzar per calcular la correlació unidimensional al llarg d’un eix determinat
- La funció correlacionar permet la correlació multidimensional de qualsevol matriu amb el nucli especificat
- La funció convolve1d es pot utilitzar per calcular la convolució unidimensional al llarg d’un eix determinat
- La funció convolve permet la convolució multidimensional de qualsevol matriu amb el nucli especificat
EXEMPLE:
import numpy as np from scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], pesos = [1,2])
SORTIDA: matriu ([9, 13, 7, 15, 11, 14, 24, 17])
Fitxer IO:
El paquet scipy.io proporciona diverses funcions que us ajuden a gestionar fitxers de diferents formats, com ara fitxers MATLAB, fitxers IDL, fitxers Matrix Market, etc.
Per fer ús d’aquest paquet, l’haureu d’importar de la manera següent:
importa scipy.io com a sio
Per obtenir informació completa sobre el subenvàs, podeu consultar el document oficial a Arxiu IO .
Això ens porta al final d’aquest tutorial SciPy. Espero que ho hagueu entès tot amb claredat. Assegureu-vos de practicar el màxim possible .
Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc “Tutorial SciPy” i us respondrem el més aviat possible.
Per obtenir coneixements en profunditat sobre Python juntament amb les seves diverses aplicacions, podeu inscriure-us a la publicació amb assistència les 24 hores del dia, els 7 dies de la setmana i accés permanent