SciPy sisään Python Opetusohjelma: Mikä on, kirjasto, funktio ja esimerkit

SciPy sisään Python

SciPy sisään Python on avoimen lähdekoodin kirjasto, jota käytetään matemaattisten, tieteellisten, tekniikan ja teknisten ongelmien ratkaisemiseen. Sen avulla käyttäjät voivat käsitellä tietoja ja visualisoida tietoja käyttämällä laajaa valikoimaa korkean tason laitteita Python komentoja. SciPy on rakennettu Python NumPy-laajennus. SciPy lausutaan myös nimellä "Sigh Pi".

SciPyn alapaketit:

Miksi käyttää SciPyä

  • SciPy sisältää erilaisia ​​alipaketteja, jotka auttavat ratkaisemaan yleisimmät tieteelliseen laskemiseen liittyvät ongelmat.
  • SciPy-paketti mukana Python on eniten käytetty tieteellinen kirjasto vain toiseksi GNU Scientific Libraryn jälkeen C/C++ tai Matlabista.
  • Helppokäyttöinen ja ymmärrettävä sekä nopea laskentateho.
  • Se voi toimia NumPy-kirjaston ryhmässä.

Numpy VS SciPy

Nöpö

  • Numpy on kirjoitettu C-kielellä ja sitä käytetään matemaattiseen tai numeeriseen laskemiseen.
  • Se on nopeampi kuin muut Python kirjastot
  • Numpy on hyödyllisin Data Sciencen kirjasto peruslaskelmien suorittamiseen.
  • Numpy sisältää vain taulukkotietotyyppiä, joka suorittaa perustoiminnot, kuten lajittelun, muotoilun, indeksoinnin jne.

SciPy

  • SciPy on rakennettu NumPyn päälle
  • SciPy-moduuli sisään Python on täysin varusteltu versio Linear Algebrasta, kun taas Numpy sisältää vain muutamia ominaisuuksia.
  • Useimmat uudet Data Science -ominaisuudet ovat saatavilla Scipyssä Numpyn sijaan.

SciPy – Asennus ja ympäristön asetukset

Voit myös asentaa SciPyn sisään Windows pipin kautta

Python3 -m pip install --user numpy scipy 

Asenna Scipy Linuxiin

sudo apt-get install  python-scipy python-numpy

Asenna SciPy Maciin

sudo port install py35-scipy py35-numpy

Ennen kuin aloitamme SciPyn oppimisen Python, sinun on tiedettävä perustoiminnot sekä erilaiset joukon tyypit nuhjuinen

Tavallinen tapa tuoda SciPy-moduulit ja Numpy:

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

Tiedoston syöttö/tulostuspaketti

Scipy, I/O-paketti, sisältää laajan valikoiman toimintoja työskentelyyn eri tiedostomuotojen kanssa, jotka ovat Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV ja binäärimuoto.

Otetaan yksi tiedostomuoto Python SciPy-esimerkki, jota käytetään säännöllisesti MatLabissa:

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

lähtö:

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

Koodin selitys

  • Rivit 1 ja 2: Tuo tärkeä SciPy-kirjasto sisään Python I/O-paketilla ja Numpylla.
  • line 3: Luo 4 x 4-ulotteinen joukko
  • line 4: Tallenna joukko sisään esimerkki.matto tiedosto.
  • Rivi 5: Hae tiedot osoitteesta esimerkki.matto tiedosto
  • line 6: Tulostustuloste.

Erikoistoimintopaketti

  • scipy.special paketti sisältää lukuisia matemaattisen fysiikan toimintoja.
  • SciPy-erikoistoiminto sisältää kuutiojuuren, eksponentiaalisen, log-summan eksponentiaalisen, Lambertin, permutoinnin ja yhdistelmät, gamman, Besselin, hypergeometrisen, kelvinin, beeta-, parabolisylinterin, suhteellisen virheen eksponentiaalisen jne.
  • Jos haluat kuvailla kaikki nämä toiminnot yhdellä rivillä, kirjoita Python konsoli:
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.

Kuutiojuurifunktio

Kuutiojuurifunktio etsii arvojen kuutiojuuren.

Syntaksi:

scipy.special.cbrt(x)

Esimerkiksi:

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

lähtö: array([3., 4.])

Eksponentti funktio:

Eksponentiaalinen funktio laskee 10**x elementtikohtaisesti.

Esimerkiksi:

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

lähtö: [1.e+01 1.e+10]

Permutaatiot ja yhdistelmät

SciPy tarjoaa myös toiminnot permutaatioiden ja yhdistelmien laskemiseen.

Yhdistelmät - scipy.special.comb(N,k)

Esimerkiksi:

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)

lähtö: 15.0

Permutaatiot -

scipy.special.perm(N,k)

Esimerkiksi:

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

lähtö: 20

Lokisumman eksponentiaalinen funktio

Log Sum Exponential laskee eksponentiaalisen summan syöteelementin lokin.

Syntaksi :

scipy.special.logsumexp(x) 

Besselin toiminto

N:nnen kokonaisluvun laskentafunktio

Syntaksi :

scipy.special.jn()

Lineaarinen algebra SciPyn kanssa

  • SciPyn lineaarinen algebra on BLAS- ja ATLAS LAPACK -kirjastojen toteutus.
  • Lineaarialgebran suorituskyky on erittäin nopea verrattuna BLASiin ja LAPACKiin.
  • Lineaarinen algebra-rutiini hyväksyy kaksiulotteisen taulukon objektin ja tulos on myös kaksiulotteinen taulukko.

Tehdään nyt testi scipy.linalg,

laskettaessa määräävä tekijä kaksiulotteisesta matriisista,

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 )

lähtö: -7.0

Käänteinen matriisi -

scipy.linalg.inv()

Scipyn käänteismatriisi laskee minkä tahansa neliömatriisin käänteisarvon.

Katsotaan,

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 )

lähtö:

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

Ominaisarvot ja ominaisvektori

scipy.linalg.eig()

  • Lineaarialgebran yleisin ongelma on ominaisarvot ja ominaisvektori, jotka voidaan helposti ratkaista käyttämällä eig()toiminto.
  • Etsitään nyt ominaisarvon (X) ja vastaavat kaksiulotteisen neliömatriisin ominaisvektoria.

esimerkki

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)

lähtö:

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

Diskreetti Fourier-muunnos – scipy.fftpack

  • DFT on matemaattinen tekniikka, jota käytetään paikkatietojen muuntamiseen taajuustiedoiksi.
  • FFT (Fast Fourier Transformation) on algoritmi DFT:n laskemiseen
  • FFT:tä sovelletaan moniulotteiseen taulukkoon.
  • Taajuus määrittää signaalin määrän tai aallonpituuden tietyllä ajanjaksolla.

Esimerkiksi: Ota aalto ja näytä käyttämällä Matplotlib-kirjastoa. otamme yksinkertaisen jaksollisen funktion esimerkin 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()

lähtö:

Diskreetti Fourier-muunnos

Voit nähdä tämän. Taajuus on 5 Hz ja sen signaali toistuu 1/5 sekunnissa – se on kutsu tiettynä ajanjaksona.

Käyttäkäämme nyt tätä siniaaltoa DFT-sovelluksen avulla.

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

lähtö:

Diskreetti Fourier-muunnos

  • Voit selvästi nähdä, että tulos on yksiulotteinen matriisi.
  • Kompleksiarvoja sisältävä syöte on nolla kahta pistettä lukuun ottamatta.
  • DFT-esimerkissä visualisoimme signaalin suuruuden.

Optimointi ja sovitus SciPyssä – scipy.optimize

  • Optimointi tarjoaa hyödyllisen algoritmin käyräsovituksen, moniulotteisen tai skalaari- ja juurisovituksen minimoimiseen.
  • Otetaan esimerkki skalaarifunktio,löytääksesi minimiskalaarifunktion.
%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) 

lähtö:

Optimointi ja sovitus SciPyyn

Optimointi lopetettiin onnistuneesti.

Nykyinen funktion arvo: -23.241676

Iteraatiot: 4

Toiminnan arvioinnit: 18

Gradientin arvioinnit: 6

array([-1.67096375])

  • Tässä esimerkissä optimointi tehdään gradientin laskeutumisalgoritmin avulla alkupisteestä
  • Mutta mahdollinen ongelma on paikalliset minimit globaalien minimien sijaan. Jos emme löydä globaalien minimien naapuria, meidän on käytettävä globaalia optimointia ja löydettävä globaali minimifunktio, jota käytetään pesuallas () joka yhdistää paikallisen optimoijan.

optimoi.basinhopping(funktio, 0)

lähtö:

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-algoritmi:

  • Nelder-Mead-algoritmi valitsee menetelmäparametrin kautta.
  • Se tarjoaa yksinkertaisimman tavan minimoida reilun käyttäytymisen.
  • Nelder – Mead-algoritmia ei käytetä gradienttiarviointiin, koska ratkaisun löytäminen voi kestää kauemmin.
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")

lähtö:

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

Kuvankäsittely SciPyllä – scipy.ndimage

  • scipy.ndimage on SciPyn alimoduuli, jota käytetään useimmiten kuviin liittyvien toimintojen suorittamiseen
  • ndimage tarkoittaa "n"-ulotteista kuvaa.
  • SciPy Image Processing tarjoaa geometrisen muunnoksen (kierrä, rajaa, käännä), kuvan suodatuksen (terävä ja poista), näyttökuvan, kuvan segmentoinnin, luokittelun ja ominaisuuksien poimimisen.
  • MISC-paketti SciPy sisältää valmiita kuvia, joita voidaan käyttää kuvankäsittelytehtävän suorittamiseen

Esimerkiksi: Otetaan esimerkki kuvien geometrisesta muunnoksesta

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

lähtö:

Kuvankäsittely SciPyllä

Nyt me Kääntö alas nykyinen kuva:

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

lähtö:

Kuvankäsittely SciPyllä

Esimerkiksi: Kuvan kääntäminen Scipyllä,

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

lähtö:

Kuvankäsittely SciPyllä

Integrointi Scipyn kanssa – Numeerinen integrointi

  • Kun integroimme minkä tahansa funktion, jossa analyyttinen integrointi ei ole mahdollista, meidän on turvauduttava numeeriseen integrointiin
  • SciPy tarjoaa toiminnot funktion integroimiseksi numeeriseen integrointiin.
  • scipy.integrate kirjastossa on yksi integraatio, kaksois-, kolmois-, moninkertainen, Gaussin kvadraatin, Rombergin, puolisuunnikkaan ja Simpsonin säännöt.

Esimerkiksi: Ota nyt esimerkki Yksittäinen integraatio

Integrointi Scipyn kanssa

Tässä a on yläraja ja b on alaraja

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)

lähtö:

(0.33333333333333337, 3.700743415417189e-15)

Tässä funktio palauttaa kaksi arvoa, joista ensimmäinen arvo on integrointi ja toinen arvo on arvioitu virhe integraalissa.

Esimerkki: Ota nyt SciPy-esimerkki kaksoisintegraatio. Löydämme seuraavan yhtälön kaksoisintegroinnin,

Integrointi Scipyn kanssa

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)

lähtö:

(3.0, 9.657432734515774e-14)

Olet nähnyt yllä olevan tulosteen samana edellisenä.

Yhteenveto

  • SciPy (lausutaan "Sigh Pi") on avoin lähdekoodi Python-pohjainen kirjasto, jota käytetään matematiikassa, tieteellisessä laskennassa, tekniikassa ja teknisessä laskennassa.
  • SciPy sisältää erilaisia ​​alipaketteja, jotka auttavat ratkaisemaan yleisimmät tieteelliseen laskemiseen liittyvät ongelmat.
  • SciPy on rakennettu NumPyn päälle
Paketin nimi Tuotetiedot
scipy.io Tiedoston syöttö/tulostus
scipy.special Erityistoiminto
scipy.linalg Lineaarialgebra OperaTUKSEN
scipy.interpolate interpolointi
scipy.optimize Optimointi ja istuvuus
scipy.stats Tilastot ja satunnaisluvut
scipy.integrate Numeerinen integrointi
scipy.fftpack Nopeat Fourier-muunnokset
scipy.signal Signal Käsittely
scipy.ndimage Kuvankäsittely -