SciPy vodič: Što je SciPy? (s primjerima)

⚡ Pametni sažetak

SciPy je program otvorenog koda Python biblioteka za znanstveno i tehničko računanje, izgrađena na NumPy-ju. Ovdje ćete naučiti njezine glavne podpakete za ulazno/izlazne operacije s datotekama, linearnu algebru, optimizaciju, Fourierove transformacije, integraciju i obradu slika s primjerima.

  • 🔬 Što je to: SciPy je Python knjižnica za matematiku, znanost i inženjersko računarstvo.
  • 🧱 Izgrađeno na NumPy-u: SciPy proširuje NumPy naprednim znanstvenim podpaketima.
  • 📐 Linearna algebra: scipy.linalg izračunava determinante, inverze i svojstvene vrijednosti.
  • 📈 Optimizacija: scipy.optimize minimizira funkcije i prilagođava krivulje.
  • 🖼️ Slika i signali: scipy.ndimage i scipy.fftpack obrađuju slike i Fourierove transformacije.
  • 🤖 Pomoć umjetne inteligencije: Alati umjetne inteligencije poput Copilota generiraju SciPy kod za znanstvene zadatke.

SciPy unutra Python

SciPy unutra Python

SciPy unutra Python je knjižnica otvorenog koda koja se koristi za rješavanje matematičkih, znanstvenih, inženjerskih i tehničkih problema. Omogućuje korisnicima manipuliranje podacima i vizualizaciju podataka pomoću širokog raspona visoke razine Python naredbe. SciPy je izgrađen na Python NumPy ekstenzija. SciPy se također izgovara kao "Sigh Pi".

Potpaketi SciPy:

Zašto koristiti SciPy

  • SciPy sadrži različite potpakete koji pomažu u rješavanju najčešćih problema povezanih sa znanstvenim računanjem.
  • SciPy paket u Python je najčešće korištena znanstvena knjižnica, odmah iza GNU-ove znanstvene knjižnice za C/C++ ili Matlab-a.
  • Jednostavan za korištenje i razumijevanje, kao i brza računalna snaga.
  • Može raditi na nizu NumPy biblioteke.

Numpy VS SciPy

numpy

  • Numpy je napisan u C-u i koristi se za matematičke ili numeričke izračune.
  • Brži je od ostalih Python Knjižnice
  • Numpy je najkorisnija biblioteka za Data Science za izvođenje osnovnih izračuna.
  • Numpy ne sadrži ništa osim podatkovnog tipa niza koji izvodi najosnovnije operacije poput sortiranja, shaping, indeksiranje itd.

SciPy

  • SciPy je ugrađen u NumPy
  • SciPy modul u Python je potpuno opremljena verzija Linearne algebre dok Numpy sadrži samo nekoliko značajki.
  • Većina novih značajki Data Science dostupna je u Scipyju, a ne u Numpyju.

SciPy – Instalacija i postavljanje okruženja

Također možete instalirati SciPy u Windows putem pipa

Python3 -m pip install --user numpy scipy 

Instalirajte Scipy na Linux

sudo apt-get install  python-scipy python-numpy

Instalirajte SciPy na Mac

sudo port install py35-scipy py35-numpy

Prije nego počnemo učiti SciPy Python, trebate poznavati osnovne funkcije kao i različite vrste niza numpy

Standardni način uvoza SciPy modula i Numpyja:

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

Paket za ulaz/izlaz datoteke

Scipy, I/O paket, ima širok raspon funkcija za rad s različitim formatima datoteka kao što su Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV i binarni format.

Uzmimo jedan format datoteke Python SciPy primjer koji se redovito koristi u MatLabu:

 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']

Izlaz:

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

Code Objašnjenje

  • Redak 1 i 2: Uvezite osnovnu biblioteku SciPy Python s I/O paketom i Numpyjem.
  • linija 3: Stvorite 4 x 4, dimenzionalni niz
  • linija 4: Pohrani niz u primjer.mat file.
  • Redak 5: Dobiti podatke od primjer.mat file
  • linija 6: Ispis.

Paket posebnih funkcija

  • scipy.poseban paket sadrži brojne funkcije matematičke fizike.
  • Posebna funkcija SciPy uključuje kubični korijen, eksponencijal, eksponencijal log zbroja, Lambert, permutaciju i kombinacije, gama, Bessel, hipergeometriju, Kelvin, beta, parabolički cilindar, eksponencijal relativne pogreške itd.
  • Za opis svih ovih funkcija u jednom retku upišite Python konzola:
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.

Funkcija kubičnog korijena

Funkcija kubičnog korijena pronalazi kubni korijen vrijednosti.

Sintaksa:

scipy.special.cbrt(x)

Primjer:

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

Izlaz: niz([3., 4.])

Eksponencijalna funkcija:

Eksponencijalna funkcija izračunava 10**x po elementima.

Primjer:

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

Izlaz: [1.e+01 1.e+10]

Permutacije i kombinacije

SciPy također daje funkcionalnost za izračunavanje permutacija i kombinacija.

Kombinacije - scipy.poseban.comb(N,k)

Primjer:

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)

Izlaz: 15.0

Permutacije –

scipy.special.perm(N,k)

Primjer:

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

Izlaz: 20

Log zbroj eksponencijalne funkcije

Log Sum Exponential izračunava log zbroja eksponencijalnog ulaznog elementa.

sintaksa:

scipy.special.logsumexp(x) 

Besselova funkcija

Funkcija izračuna n-tog cijelog reda

sintaksa:

scipy.special.jn()

Linearna algebra sa SciPy

  • Linearna algebra SciPy je implementacija BLAS i ATLAS LAPACK biblioteka.
  • Izvedba Linearne algebre vrlo je brza u usporedbi s BLAS-om i LAPACK-om.
  • Rutina linearne algebre prihvaća objekt dvodimenzionalnog niza i izlaz je također dvodimenzionalni niz.

Sada napravimo neki test sa scipy.linalg,

računanje determinanta dvodimenzionalne matrice,

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 )

Izlaz: -7.0

Inverzna matrica –

scipy.linalg.inv()

Inverzna matrica Scipyja izračunava inverziju bilo koje kvadratne matrice.

Da vidimo,

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 )

Izlaz:

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

Svojstvene vrijednosti i svojstveni vektor

scipy.linalg.eig()

  • Najčešći problem u linearnoj algebri su svojstvene vrijednosti i svojstveni vektor koji se lako mogu riješiti pomoću eig()funkcija.
  • Sada ćemo pronaći vlastitu vrijednost (X) i odgovaraju svojstvenom vektoru dvodimenzionalne kvadratne matrice.

Primjer

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)

Izlaz:

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

Diskretna Fourierova transformacija – scipy.fftpack

  • DFT je matematička tehnika koja se koristi za pretvaranje prostornih podataka u frekvencijske podatke.
  • FFT (Fast Fourier Transformation) je algoritam za izračunavanje DFT-a
  • FFT se primjenjuje na višedimenzionalni niz.
  • Frekvencija definira broj signala ili valne duljine u određenom vremenskom razdoblju.

Primjer: Zamahnite i pokažite pomoću biblioteke Matplotlib. uzmimo primjer jednostavne periodične funkcije 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()

Izlaz:

Diskretna Fourierova transformacija

Možete vidjeti ovo. Frekvencija je 5 Hz i njegov signal se ponavlja u 1/5 sekunde – to je poziv kao određeni vremenski period.

Iskoristimo sada ovaj sinusoidni val uz pomoć DFT aplikacije.

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()

Izlaz:

Diskretna Fourierova transformacija

  • Možete jasno vidjeti da je izlaz jednodimenzionalni niz.
  • Ulaz koji sadrži složene vrijednosti je nula osim dvije točke.
  • U DFT primjeru vizualiziramo veličinu signala.

Optimizacija i uklapanje u SciPy – scipy.optimize

  • Optimizacija pruža koristan algoritam za minimiziranje prilagođavanja krivulje, višedimenzionalnog ili skalarnog i korijenskog prilagođavanja.
  • Uzmimo primjer skalarna funkcija,pronaći minimalnu skalarnu funkciju.
%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) 

Izlaz:

Optimizacija i uklapanje u SciPy

Optimizacija je uspješno prekinuta.

Trenutna vrijednost funkcije: -23.241676

Ponavljanja: 4

Ocjene funkcija: 18

Ocjene stupnjeva: 6

niz([-1.67096375])

  • U ovom primjeru optimizacija se vrši uz pomoć algoritma gradijentnog spuštanja od početne točke
  • Ali mogući problem su lokalni minimumi umjesto globalnih minimuma. Ako ne pronađemo susjeda globalnih minimuma, tada moramo primijeniti globalnu optimizaciju i pronaći globalnu funkciju minimuma koja se koristi kao skakač iz bazenaping() koji kombinira lokalni optimizator.

optimize.basinhopping(funkcija, 0)

Izlaz:

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])

Nelder – Mead algoritam:

  • Nelder-Mead algoritam bira kroz parametar metode.
  • Omogućuje najjednostavniji način minimiziranja za pošteno funkcioniranje.
  • Nelder – Mead algoritam se ne koristi za procjene gradijenta jer može biti potrebno više vremena da se pronađe rješenje.
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")

Izlaz:

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])

Obrada slike sa SciPy – scipy.ndimage

  • scipy.ndimage je podmodul SciPy-ja koji se uglavnom koristi za izvođenje operacije povezane sa slikom
  • ndimage znači "n" dimenzionalnu sliku.
  • SciPy obrada slika omogućuje geometrijske transformacije (rotiranje, izrezivanje, okretanje), filtriranje slika (oštrenje i uklanjanje nodula), prikaz slika, segmentaciju slika, klasifikaciju i značajke.traction.
  • RAZNO paket u SciPy sadrži unaprijed izgrađene slike koje se mogu koristiti za izvođenje zadatka manipulacije slikama

Primjer: Uzmimo primjer geometrijske transformacije slika

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()

Izlaz:

Obrada slike sa SciPy

Sad mi Preklopni trenutna slika:

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

Izlaz:

Obrada slike sa SciPy

Primjer: Rotacija slike pomoću Scipyja,

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()

Izlaz:

Obrada slike sa SciPy

Integracija sa Scipyjem – Numerička integracija

  • Kada integriramo bilo koju funkciju gdje analitička integracija nije moguća, moramo se okrenuti numeričkoj integraciji
  • SciPy pruža funkcionalnost za integraciju funkcije s numeričkom integracijom.
  • scipy.integrirati biblioteka ima jednostruku integraciju, dvostruku, trostruku, višestruku, Gaussov kvadrat, Rombergova, trapezna i Simpsonova pravila.

Primjer: Sada uzmite primjer Jedinstvena integracija

Integracija sa Scipyjem

Ovdje a je gornja granica i b je donja granica

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)

Izlaz:

(0.33333333333333337, 3.700743415417189e-15)

Ovdje funkcija vraća dvije vrijednosti, od kojih je prva vrijednost integracija, a druga vrijednost procijenjena pogreška u integralu.

Primjer: sada uzmite SciPy primjer dvostruka integracija. Nalazimo dvostruku integraciju sljedeće jednadžbe,

Integracija sa Scipyjem

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)

Izlaz:

(3.0, 9.657432734515774e-14)

Vidjeli ste da je gornji izlaz kao isti prethodni.

Pitanja i odgovori

SciPy je program otvorenog koda Python biblioteka za znanstveno i tehničko računanje. Izgrađena na NumPy-ju, pruža podpakete za linearnu algebru, optimizaciju, integraciju, obradu signala i još mnogo toga.

NumPy pruža osnovni tip podataka polja i osnovne operacije, dok SciPy gradi na NumPy-ju kako bi dodao napredne znanstvene funkcije poput optimizacije, integracije i potpune linearne algebre.

Instalirajte SciPy s pipom pomoću naredbe pip install scipy, koja također povlači NumPy. Na Linuxu i Macu umjesto toga možete koristiti upravitelj sistemskih paketa.

scipy.linalg pruža rutine linearne algebre izgrađene na BLAS-u i LAPACK-u. Brzo izračunava determinante, inverzne matrice, svojstvene vrijednosti i svojstvene vektore dvodimenzionalnih nizova.

scipy.optimize pruža algoritme za minimiziranje funkcija, prilagođavanje krivulja i pronalaženje korijena. Uključuje metode poput BFGS-a, basin-hop-a.pingi Nelder-Mead algoritam.

AI asistenti poput GitHub Copilota automatski dovršavaju pozive SciPy funkcija, predlažu pravi podpaket za zadatak i generiraju radne primjere za optimizaciju, integraciju ili obradu signala.

Da. Alati pokretani umjetnom inteligencijom mogu automatizirati pisanje SciPy cjevovoda, odabrati prikladne algoritme i refaktorirati spore numeričke petlje u vektorizirane NumPy i SciPy operacije za bolje performanse.

Da. Podpaket scipy.ndimage obrađuje operacije sa slikama kao što su rotiranje, okretanjeping, usjevping, filtriranje i segmentacija, rad na slikama kao višedimenzionalnim NumPy nizovima.

Sažmite ovu objavu uz: