Tutorial SciPy: Ce este SciPy? (cu exemple)

โšก Rezumat inteligent

SciPy este open-source Python Bibliotecฤƒ pentru calcul ศ™tiinศ›ific ศ™i tehnic, construitฤƒ pe baza NumPy. Aici veศ›i รฎnvฤƒศ›a principalele subpachete pentru I/O fiศ™iere, algebrฤƒ liniarฤƒ, optimizare, transformฤƒri Fourier, integrare ศ™i procesare de imagini, cu exemple.

  • ๐Ÿ”ฌ Ce este: SciPy este o Python bibliotecฤƒ pentru matematicฤƒ, ศ™tiinศ›e ศ™i inginerie informaticฤƒ.
  • ๐Ÿงฑ Construit pe NumPy: SciPy extinde NumPy cu subpachete ศ™tiinศ›ifice avansate.
  • ๐Ÿ“ Algebrฤƒ liniarฤƒ: scipy.linalg calculeazฤƒ determinanศ›i, inversi ศ™i valori proprii.
  • ๐Ÿ“ˆ Optimizare: scipy.optimize minimizeazฤƒ funcศ›iile ศ™i ajusteazฤƒ curbele.
  • ๐Ÿ–ผ๏ธ Imagine ศ™i semnale: scipy.ndimage ศ™i scipy.fftpack gestioneazฤƒ imagini ศ™i transformฤƒri Fourier.
  • ๐Ÿค– Ajutor AI: Instrumentele de inteligenศ›ฤƒ artificialฤƒ precum Copilot genereazฤƒ cod SciPy pentru sarcini ศ™tiinศ›ifice.

SciPy รฎn Python

SciPy รฎn Python

SciPy รฎn Python este o bibliotecฤƒ open-source folositฤƒ pentru rezolvarea problemelor matematice, ศ™tiinศ›ifice, de inginerie ศ™i tehnice. Permite utilizatorilor sฤƒ manipuleze datele ศ™i sฤƒ le vizualizeze folosind o gamฤƒ largฤƒ de instrumente de nivel รฎnalt Python comenzi. SciPy este construit pe Python Extensia NumPy. SciPy este, de asemenea, pronunศ›at ca โ€žSigh Piโ€.

Sub-pachete de SciPy:

De ce sฤƒ folosiศ›i SciPy

  • SciPy conศ›ine varietฤƒศ›i de subpachete care ajutฤƒ la rezolvarea celei mai frecvente probleme legate de calculul ศ™tiinศ›ific.
  • Pachetul SciPy รฎn Python este cea mai folositฤƒ bibliotecฤƒ ศ™tiinศ›ificฤƒ, a doua dupฤƒ GNU Scientific Library pentru C/C++ sau de la Matlab.
  • Uศ™or de utilizat ศ™i de รฎnศ›eles, precum ศ™i putere de calcul rapidฤƒ.
  • Poate funcศ›iona pe o serie de biblioteci NumPy.

Numpy VS SciPy

NumPy

  • Numpy este scris รฎn C ศ™i este utilizat pentru calcule matematice sau numerice.
  • Este mai rapid decรขt altele Python Biblioteci
  • Numpy este cea mai utilฤƒ bibliotecฤƒ pentru Data Science pentru a efectua calcule de bazฤƒ.
  • Numpy nu conศ›ine nimic altceva decรขt date de tip array care efectueazฤƒ cele mai elementare operaศ›ii, cum ar fi sortarea, sha-ul.ping, indexare etc.

SciPy

  • SciPy este construit รฎn partea de sus a NumPy
  • Modulul SciPy รฎn Python este o versiune completฤƒ a Algebrei liniare, รฎn timp ce Numpy conศ›ine doar cรขteva caracteristici.
  • Majoritatea noilor funcศ›ii Data Science sunt disponibile รฎn Scipy ศ™i nu รฎn Numpy.

SciPy โ€“ Instalare ศ™i configurare a mediului

De asemenea, puteศ›i instala SciPy รฎn Windows prin pip

Python3 -m pip install --user numpy scipy 

Instalaศ›i Scipy pe Linux

sudo apt-get install  python-scipy python-numpy

Instalaศ›i SciPy pe Mac

sudo port install py35-scipy py35-numpy

รŽnainte de a รฎncepe sฤƒ รฎnvฤƒศ›ฤƒm SciPy Python, trebuie sฤƒ cunoaศ™teศ›i funcศ›ionalitatea de bazฤƒ, precum ศ™i diferite tipuri de matrice de NumPy

Modul standard de a importa module SciPy ศ™i Numpy:

from scipy import special   #same for other modules
import numpy as np

Pachetul de intrare/ieศ™ire fiศ™ier

Scipy, pachet I/O, are o gamฤƒ largฤƒ de funcศ›ii pentru lucrul cu diferite formate de fiศ™iere, care sunt Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV ศ™i format binar.

Sฤƒ luฤƒm un singur format de fiศ™ier Python Exemplu SciPy care sunt utilizate รฎn mod regulat รฎn MatLab:

 import numpy as np
 from scipy import io as sio
 array = np.ones((4, 4))
 sio.savemat('example.mat', {'ar': array}) 
 data = sio.loadmat(โ€˜example.mat', struct_as_record=True)
 data['ar']

ieศ™ire:

array([[ 1., 1., 1., 1.],
           [ 1., 1., 1., 1.],
           [ 1., 1., 1., 1.],
           [ 1., 1., 1., 1.]])

Code Explicaศ›ie

  • Linia 1 ศ™i 2: Importaศ›i biblioteca esenศ›ialฤƒ SciPy รฎn Python cu pachet I/O ศ™i Numpy.
  • Line 3: Creaศ›i o matrice dimensionalฤƒ 4 x 4
  • Line 4: stocaศ›i matricea รฎn exemplu.mat fiศ™ier.
  • Linia 5: Obศ›ineศ›i date de la exemplu.mat fiลŸier
  • Line 6: Ieศ™ire tipฤƒritฤƒ.

Pachet cu funcศ›ii speciale

  • scipy.special pachetul conศ›ine numeroase funcศ›ii ale fizicii matematice.
  • Funcศ›ia specialฤƒ SciPy include rฤƒdฤƒcinฤƒ cubicฤƒ, exponenศ›ialฤƒ, log sumฤƒ exponenศ›ialฤƒ, Lambert, permutare ศ™i combinaศ›ii, Gamma, Bessel, hipergeometricฤƒ, Kelvin, beta, cilindru parabolic, eroare relativฤƒ exponenศ›ialฤƒ etc.
  • Pentru descrierea pe o linie a tuturor acestor funcศ›ii, tastaศ›i Python consolฤƒ:
help(scipy.special)	
Output:
NAME
    scipy.special

DESCRIPTION
    ========================================
    Special functions (:mod:`scipy.special`)
    ========================================
     
    .. module:: scipy.special
     
    Nearly all of the functions below are universal functions and follow
    broadcasting and automatic array-looping rules. Exceptions are noted.

Funcศ›ia rฤƒdฤƒcinฤƒ cubicฤƒ

Funcศ›ia Cubic Root gฤƒseศ™te rฤƒdฤƒcina cubฤƒ a valorilor.

Sintaxฤƒ:

scipy.special.cbrt(x)

Exemplu:

from scipy.special import cbrt
#Find cubic root of 27 & 64 using cbrt() function
cb = cbrt([27, 64])
#print value of cb
print(cb)

ieศ™ire: matrice([3., 4.])

Functie exponentiala:

Funcศ›ia exponenศ›ialฤƒ calculeazฤƒ elementul 10**x.

Exemplu:

from scipy.special import exp10
#define exp10 function and pass value in its
exp = exp10([1,10])
print(exp)

ieศ™ire: [1.e+01 1.e+10]

Permutฤƒri ศ™i combinaศ›ii

SciPy oferฤƒ, de asemenea, funcศ›ionalitate pentru a calcula Permutฤƒrile ศ™i Combinaศ›iile.

combinatii - scipy.special.comb(N,k)

Exemplu:

from scipy.special import comb
#find combinations of 5, 2 values using comb(N, k)
com = comb(5, 2, exact = False, repetition=True)
print(com)

ieศ™ire: 15.0

Permutฤƒri -

scipy.special.perm(N,k)

Exemplu:

from scipy.special import perm
#find permutation of 5, 2 using perm (N, k) function
per = perm(5, 2, exact = True)
print(per)

ieศ™ire: 20

Funcศ›ia exponenศ›ialฤƒ a sumei jurnalului

Log Sum Exponential calculeazฤƒ logul elementului de intrare sumฤƒ exponenศ›ialฤƒ.

Sintaxa:

scipy.special.logsumexp(x) 

Funcศ›ia Bessel

Funcศ›ia de calcul de ordinul a n-a รฎntreg

Sintaxa:

scipy.special.jn()

Algebrฤƒ liniarฤƒ cu SciPy

  • Linear Algebra of SciPy este o implementare a bibliotecilor BLAS ศ™i ATLAS LAPACK.
  • Performanศ›a Algebrei Liniare este foarte rapidฤƒ รฎn comparaศ›ie cu BLAS ศ™i LAPACK.
  • Rutina de algebrฤƒ liniarฤƒ acceptฤƒ obiecte matrice bidimensionale ศ™i ieศ™irea este, de asemenea, o matrice bidimensionalฤƒ.

Acum hai sฤƒ facem un test cu scipy.linalg,

De calculat determinant a unei matrice bidimensionale,

from scipy import linalg
import numpy as np
#define square matrix
two_d_array = np.array([ [4,5], [3,2] ])
#pass values to det() function
linalg.det( two_d_array )

ieศ™ire: -7.0

matrice inversฤƒ -

scipy.linalg.inv()

Inverse Matrix of Scipy calculeazฤƒ inversul oricฤƒrei matrice pฤƒtrate.

Sฤƒ vedem,

from scipy import linalg
import numpy as np
# define square matrix
two_d_array = np.array([ [4,5], [3,2] ])
#pass value to function inv()
linalg.inv( two_d_array )

ieศ™ire:

array( [[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]] )

Valori proprii ศ™i vector propriu

scipy.linalg.eig()

  • Cea mai comunฤƒ problemฤƒ รฎn algebra liniarฤƒ este valorile proprii ศ™i vectorul propriu care pot fi rezolvate cu uศ™urinศ›ฤƒ folosind eig()Funcศ›ia.
  • Acum sฤƒ gฤƒsim valoarea proprie a (X) ศ™i vectorul propriu corespunzฤƒtor al unei matrice pฤƒtrate bidimensionale.

Exemplu

from scipy import linalg
import numpy as np
#define two dimensional array
arr = np.array([[5,4],[6,3]])
#pass value into function
eg_val, eg_vect = linalg.eig(arr)
#get eigenvalues
print(eg_val)
#get eigenvectors
print(eg_vect)

ieศ™ire:

[ 9.+0.j -1.+0.j] #eigenvalues
 [ [ 0.70710678 -0.5547002 ] #eigenvectors
   [ 0.70710678  0.83205029] ]

Transformatฤƒ Fourier discretฤƒ โ€“ scipy.fftpack

  • DFT este o tehnicฤƒ matematicฤƒ care este utilizatฤƒ pentru conversia datelor spaศ›iale รฎn date de frecvenศ›ฤƒ.
  • FFT (Fast Fourier Transformation) este un algoritm pentru calculul DFT
  • FFT se aplicฤƒ unei matrice multidimensionale.
  • Frecvenศ›a defineศ™te numฤƒrul de semnal sau lungimea de undฤƒ รฎntr-o anumitฤƒ perioadฤƒ de timp.

Exemplu: Ia un val ศ™i aratฤƒ folosind biblioteca Matplotlib. luฤƒm exemplu de funcศ›ie periodicฤƒ simplฤƒ a sin(20 ร— 2ฯ€t)

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np 

#Frequency in terms of Hertz
fre  = 5 
#Sample rate
fre_samp = 50
t = np.linspace(0, 2, 2 * fre_samp, endpoint = False )
a = np.sin(fre  * 2 * np.pi * t)
figure, axis = plt.subplots()
axis.plot(t, a)
axis.set_xlabel ('Time (s)')
axis.set_ylabel ('Signal amplitude')
plt.show()

ieศ™ire:

Transformatฤƒ Fourier discretฤƒ

Puteศ›i vedea asta. Frecvenศ›a este de 5 Hz ศ™i semnalul sฤƒu se repetฤƒ รฎn 1/5 secunde - este apelul ca o anumitฤƒ perioadฤƒ de timp.

Acum sฤƒ folosim aceastฤƒ undฤƒ sinusoidฤƒ cu ajutorul aplicaศ›iei DFT.

from scipy import fftpack

A = fftpack.fft(a)
frequency = fftpack.fftfreq(len(a)) * fre_samp
figure, axis = plt.subplots()

axis.stem(frequency, np.abs(A))
axis.set_xlabel('Frequency in Hz')
axis.set_ylabel('Frequency Spectrum Magnitude')
axis.set_xlim(-fre_samp / 2, fre_samp/ 2)
axis.set_ylim(-5, 110)
plt.show()

ieศ™ire:

Transformatฤƒ Fourier discretฤƒ

  • Puteศ›i vedea clar cฤƒ rezultatul este o matrice unidimensionalฤƒ.
  • Intrฤƒrile care conศ›in valori complexe sunt zero, cu excepศ›ia a douฤƒ puncte.
  • รŽn exemplul DFT vizualizฤƒm mฤƒrimea semnalului.

Optimizare ศ™i potrivire รฎn SciPy โ€“ scipy.optimize

  • Optimizarea oferฤƒ un algoritm util pentru minimizarea potrivirii curbei, multidimensionale sau scalare ศ™i a rฤƒdฤƒcinii.
  • Sฤƒ luฤƒm un exemplu de o funcศ›ie scalarฤƒ,pentru a gฤƒsi funcศ›ia scalarฤƒ minimฤƒ.
%matplotlib inline
import matplotlib.pyplot as plt
from scipy import optimize
import numpy as np

def function(a):
       return   a*2 + 20 * np.sin(a)
plt.plot(a, function(a))
plt.show()
#use BFGS algorithm for optimization
optimize.fmin_bfgs(function, 0) 

ieศ™ire:

Optimizare ศ™i potrivire รฎn SciPy

Optimizarea s-a รฎncheiat cu succes.

Valoarea curentฤƒ a funcศ›iei: -23.241676

Iteraศ›ii: 4

Evaluฤƒri ale funcศ›iei: 18

Evaluฤƒri gradient: 6

matrice([-1.67096375])

  • รŽn acest exemplu, optimizarea se face cu ajutorul algoritmului de coborรขre a gradientului din punctul iniศ›ial
  • Dar posibila problemฤƒ este minimele locale รฎn loc de minimele globale. Dacฤƒ nu gฤƒsim un vecin al minimelor globale, atunci trebuie sฤƒ aplicฤƒm optimizarea globalฤƒ ศ™i sฤƒ gฤƒsim funcศ›ia de minime globale utilizatฤƒ ca bazinhopping() care combinฤƒ optimizatorul local.

optimize.basinhopping(funcศ›ie, 0)

ieศ™ire:

fun: -23.241676238045315
 lowest_optimization_result:
      fun: -23.241676238045315
 hess_inv: array([[0.05023331]])
      jac: array([4.76837158e-07])
  message: 'Optimization terminated successfully.'
     nfev: 15
      nit: 3
     njev: 5
   status: 0
  success: True
        x: array([-1.67096375])
                    message: ['requested number of basinhopping iterations completed successfully']
      minimization_failures: 0
                       nfev: 1530
                        nit: 100
                       njev: 510
               x: array([-1.67096375])

Algoritmul Nelder โ€“ Mead:

  • Algoritmul Nelder-Mead selecteazฤƒ prin parametrul metodei.
  • Oferฤƒ cea mai simplฤƒ modalitate de minimizare pentru funcศ›ia corectฤƒ.
  • Algoritmul Nelder โ€“ Mead nu este utilizat pentru evaluฤƒrile gradientului, deoarece poate dura mai mult timp pentru a gฤƒsi soluศ›ia.
import numpy as np
from scipy.optimize import minimize
#define function f(x)
def f(x):   
    return .4*(1 - x[0])**2
  
optimize.minimize(f, [2, -1], method="Nelder-Mead")

ieศ™ire:

final_simplex: (array([[ 1.        , -1.27109375],
       [ 1.        , -1.27118835],
       [ 1.        , -1.27113762]]), array([0., 0., 0.]))
           fun: 0.0
       message: 'Optimization terminated successfully.'
          nfev: 147
           nit: 69
        status: 0
       success: True
             x: array([ 1.        , -1.27109375])

Procesarea imaginii cu SciPy โ€“ scipy.ndimage

  • scipy.ndimage este un submodul al SciPy care este folosit รฎn principal pentru a efectua o operaศ›ie legatฤƒ de imagine
  • ndimage รฎnseamnฤƒ imaginea โ€žnโ€ dimensionalฤƒ.
  • SciPy Image Processing oferฤƒ transformฤƒri geometrice (rotire, decupare, rฤƒsturnare), filtrare a imaginilor (clarificare ศ™i eliminare a denivelฤƒrii), afiศ™are a imaginilor, segmentare a imaginilor, clasificare ศ™i funcศ›ii similare.tracTION.
  • Pachetul MISC รฎn SciPy conศ›ine imagini prefabricate care pot fi utilizate pentru a efectua sarcina de manipulare a imaginii

Exemplu: Sฤƒ luฤƒm un exemplu de transformare geometricฤƒ a imaginilor

from scipy import misc
from matplotlib import pyplot as plt
import numpy as np
#get face image of panda from misc package
panda = misc.face()
#plot or show image of face
plt.imshow( panda )
plt.show()

ieศ™ire:

Procesarea imaginii cu SciPy

Acum noi Flip-down imagine curenta:

#Flip Down using scipy misc.face image  
flip_down = np.flipud(misc.face())
plt.imshow(flip_down)
plt.show()

ieศ™ire:

Procesarea imaginii cu SciPy

Exemplu: Rotirea imaginii folosind Scipy,

from scipy import ndimage, misc
from matplotlib import pyplot as plt
panda = misc.face()
#rotatation function of scipy for image โ€“ image rotated 135 degree
panda_rotate = ndimage.rotate(panda, 135)
plt.imshow(panda_rotate)
plt.show()

ieศ™ire:

Procesarea imaginii cu SciPy

Integrare cu Scipy โ€“ Integrare numericฤƒ

  • Cรขnd integrฤƒm orice funcศ›ie รฎn care integrarea analiticฤƒ nu este posibilฤƒ, trebuie sฤƒ apelฤƒm la integrarea numericฤƒ
  • SciPy oferฤƒ funcศ›ionalitate pentru integrarea funcศ›iei cu integrarea numericฤƒ.
  • scipy.integra biblioteca are integrare simplฤƒ, dublฤƒ, triplฤƒ, multiplฤƒ, pฤƒtratฤƒ Gaussian, Romberg, Trapezoidal ศ™i regulile lui Simpson.

Exemplu: Acum luaศ›i un exemplu de Integrare unicฤƒ

Integrare cu Scipy

Aici a este limita superioarฤƒ ศ™i b este limita inferioarฤƒ

from scipy import integrate
# take f(x) function as f
f = lambda x : x**2
#single integration with a = 0 & b = 1  
integration = integrate.quad(f, 0 , 1)
print(integration)

ieศ™ire:

(0.33333333333333337, 3.700743415417189e-15)

Aici funcศ›ia returneazฤƒ douฤƒ valori, รฎn care prima valoare este integrarea ศ™i a doua valoare este eroarea estimatฤƒ รฎn integralฤƒ.

Exemplu: Acum luaศ›i un exemplu SciPy dubla integrare. Gฤƒsim dubla integrare a urmฤƒtoarei ecuaศ›ii,

Integrare cu Scipy

from scipy import integrate
import numpy as np
#import square root function from math lib
from math import sqrt
# set  fuction f(x)
f = lambda x, y : 64 *x*y
# lower limit of second integral
p = lambda x : 0
# upper limit of first integral
q = lambda y : sqrt(1 - 2*y**2)
# perform double integration
integration = integrate.dblquad(f , 0 , 2/4,  p, q)
print(integration)

ieศ™ire:

(3.0, 9.657432734515774e-14)

Aศ›i vฤƒzut acea ieศ™ire de mai sus ca aceeaศ™i versiune anterioarฤƒ.

รŽntrebฤƒri frecvente

SciPy este open-source Python Bibliotecฤƒ pentru calcul ศ™tiinศ›ific ศ™i tehnic. Construitฤƒ pe NumPy, oferฤƒ subpachete pentru algebrฤƒ liniarฤƒ, optimizare, integrare, procesare a semnalelor ศ™i multe altele.

NumPy oferฤƒ tipul de date de bazฤƒ de tip array ศ™i operaศ›iile de bazฤƒ, รฎn timp ce SciPy se bazeazฤƒ pe NumPy pentru a adฤƒuga funcศ›ii ศ™tiinศ›ifice avansate, cum ar fi optimizarea, integrarea ศ™i algebra liniarฤƒ completฤƒ.

Instalaศ›i SciPy cu pip folosind comanda pip install scipy, care extrage ศ™i NumPy. Pe Linux ศ™i Mac puteศ›i utiliza รฎn schimb managerul de pachete de sistem.

scipy.linalg oferฤƒ rutine de algebrฤƒ liniarฤƒ construite pe BLAS ศ™i LAPACK. Calculeazฤƒ rapid determinanศ›i, inversi matriceali, valori proprii ศ™i vectori proprii ai tablourilor bidimensionale.

scipy.optimize oferฤƒ algoritmi pentru minimizarea funcศ›iilor, ajustarea curbelor ศ™i gฤƒsirea rฤƒdฤƒcinilor. Include metode precum BFGS, basin-hoppingศ™i algoritmul Nelder-Mead.

Asistenศ›ii inteligenศ›i artificiali, precum GitHub Copilot, completeazฤƒ automat apelurile funcศ›iilor SciPy, sugereazฤƒ subpachetul potrivit pentru o sarcinฤƒ ศ™i genereazฤƒ exemple funcศ›ionale pentru optimizare, integrare sau procesare a semnalelor.

Da. Instrumentele bazate pe inteligenศ›ฤƒ artificialฤƒ pot automatiza scrierea pipelinelor SciPy, pot alege algoritmi potriviศ›i ศ™i pot refactoriza buclele numerice lente รฎn operaศ›ii NumPy ศ™i SciPy vectorizate pentru o performanศ›ฤƒ mai bunฤƒ.

Da. Subpachetul scipy.ndimage gestioneazฤƒ operaศ›iunile cu imagini, cum ar fi rotirea, rฤƒsturnareaping, decupatping, filtrare ศ™i segmentare, lucrรขnd asupra imaginilor ca tablouri NumPy multidimensionale.

Rezumaศ›i aceastฤƒ postare cu: