SciPy in Python Tutorial: Wat is, bibliotheek, functie en voorbeelden

SciPy in Python

SciPy in Python is een open-sourcebibliotheek die wordt gebruikt voor het oplossen van wiskundige, wetenschappelijke, technische en technische problemen. Het stelt gebruikers in staat de gegevens te manipuleren en de gegevens te visualiseren met behulp van een breed scala aan hoogwaardige tools Python opdrachten. SciPy is gebouwd op de Python NumPy-extensie. SciPy wordt ook uitgesproken als “Zucht Pi.”

Subpakketten van SciPy:

Waarom SciPy gebruiken?

  • SciPy bevat verschillende subpakketten die helpen bij het oplossen van de meest voorkomende problemen met betrekking tot wetenschappelijke berekeningen.
  • SciPy-pakket in Python is de meest gebruikte wetenschappelijke bibliotheek, op de tweede plaats na de GNU Scientific Library voor C/C++ of Matlab's.
  • Gemakkelijk te gebruiken en te begrijpen, evenals snelle rekenkracht.
  • Het kan werken met een reeks NumPy-bibliotheken.

Numpy versus SciPy

numpy

  • Numpy is geschreven in C en wordt gebruikt voor wiskundige of numerieke berekeningen.
  • Het is sneller dan anders Python bibliotheken
  • Numpy is de handigste bibliotheek voor Data Science om basisberekeningen uit te voeren.
  • Numpy bevat niets anders dan een array-gegevenstype waarmee de meest basale bewerkingen worden uitgevoerd, zoals sorteren, vormgeven, indexeren, enzovoort.

scipy

  • SciPy is bovenop de NumPy ingebouwd
  • SciPy-module in Python is een volledig functionele versie van lineaire algebra, terwijl Numpy slechts een paar functies bevat.
  • De meeste nieuwe Data Science-functies zijn beschikbaar in Scipy in plaats van Numpy.

SciPy – Installatie en omgevingsinstellingen

U kunt SciPy ook installeren Windows via pip

Python3 -m pip install --user numpy scipy 

Installeer Scipy op Linux

sudo apt-get install  python-scipy python-numpy

Installeer SciPy op Mac

sudo port install py35-scipy py35-numpy

Voordat we SciPy gaan leren Python, moet u de basisfunctionaliteit kennen, evenals verschillende typen van een reeks NumPy

De standaardmanier om SciPy-modules en Numpy te importeren:

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

Bestandsinvoer / uitvoerpakket

Scipy, I/O-pakket, heeft een breed scala aan functies voor het werken met verschillende bestandsformaten, waaronder Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV en binair formaat.

Laten we één bestandsformaat nemen Python SciPy-voorbeeld zoals regelmatig gebruikt in 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']

Output:

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

Code Uitleg

  • Lijn 1 & 2: Importeer de essentiële SciPy-bibliotheek in Python met I/O-pakket en Numpy.
  • Lijn 3: Creëer een 4 x 4, dimensionale array
  • Lijn 4: Array opslaan in voorbeeld.mat bestand.
  • Regel 5: Gegevens ophalen van voorbeeld.mat filet
  • Lijn 6: Afdrukuitvoer.

Speciaal functiepakket

  • pittig.speciaal pakket bevat talrijke functies van de wiskundige natuurkunde.
  • De speciale functie van SciPy omvat Kubieke Wortel, Exponentieel, Logsom Exponentieel, Lambert, Permutatie en Combinaties, Gamma, Bessel, hypergeometrisch, Kelvin, bèta, parabolische cilinder, Relatieve fout exponentieel, enz.
  • Voor een beschrijving van al deze functies in één regel, typt u Python troosten:
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.

Kubieke wortelfunctie

De functie Kubieke Wortel vindt de derdemachtswortel van waarden.

Syntax:

scipy.special.cbrt(x)

Voorbeeld:

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

Output: matrix([3., 4.])

Exponentiële functie:

De exponentiële functie berekent de 10**x elementgewijs.

Voorbeeld:

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

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

Permutaties & Combinaties

SciPy biedt ook functionaliteit om permutaties en combinaties te berekenen.

combinaties – scipy.special.comb(N,k)

Voorbeeld:

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)

Output: 15.0

Permutaties –

scipy.special.perm(N,k)

Voorbeeld:

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

Output: 20

Log Sum exponentiële functie

Log Sum Exponentieel berekent de log van het som exponentiële invoerelement.

Syntaxis :

scipy.special.logsumexp(x) 

Bessel-functie

N-de berekeningsfunctie voor gehele getallen

Syntaxis :

scipy.special.jn()

Lineaire algebra met SciPy

  • Lineaire algebra van SciPy is een implementatie van BLAS- en ATLAS LAPACK-bibliotheken.
  • De prestaties van lineaire algebra zijn erg snel vergeleken met BLAS en LAPACK.
  • Lineaire algebra-routine accepteert tweedimensionale array-objecten en de uitvoer is ook een tweedimensionale array.

Laten we nu eens een test doen scipy.linalg,

Berekenen bepalend van een tweedimensionale matrix,

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 )

Output: -7.0

Inverse matrix –

scipy.linalg.inv()

Inverse Matrix van Scipy berekent de inverse van elke vierkante matrix.

Laten we zien,

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 )

Output:

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

Eigenwaarden en Eigenvector

scipy.linalg.eig()

  • Het meest voorkomende probleem in de lineaire algebra zijn eigenwaarden en eigenvector, die eenvoudig kunnen worden opgelost met behulp van eig()functie.
  • Laten we nu de eigenwaarde van (X) en corresponderende eigenvector van een tweedimensionale vierkante matrix.

Voorbeeld

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)

Output:

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

Discrete Fourier-transformatie – scipy.fftpack

  • DFT is een wiskundige techniek die wordt gebruikt bij het omzetten van ruimtelijke gegevens in frequentiegegevens.
  • FFT (Fast Fourier Transformation) is een algoritme voor het berekenen van DFT
  • FFT wordt toegepast op een multidimensionale array.
  • Frequentie definieert het aantal signalen of golflengten in een bepaalde tijdsperiode.

Voorbeeld: Neem een ​​golf en laat zien met behulp van de Matplotlib-bibliotheek. we nemen een eenvoudig periodiek functievoorbeeld van 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()

Output:

Discrete Fourier-transformatie

Je kunt dit zien. De frequentie is 5 Hz en het signaal wordt herhaald in 1/5 seconde – dit wordt een bepaalde tijdsperiode genoemd.

Laten we nu deze sinusoïde golf gebruiken met behulp van DFT-applicatie.

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

Output:

Discrete Fourier-transformatie

  • Je kunt duidelijk zien dat de uitvoer een eendimensionale array is.
  • Invoer met complexe waarden is nul, behalve twee punten.
  • In het DFT-voorbeeld visualiseren we de grootte van het signaal.

Optimalisatie en pasvorm in SciPy – scipy.optimize

  • Optimalisatie biedt een nuttig algoritme voor het minimaliseren van curve-fitting, multidimensionale of scalaire en root-fitting.
  • Laten we een voorbeeld nemen van een scalaire functie,om de minimale scalaire functie te vinden.
%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) 

Output:

Optimalisatie en fit in SciPy

De optimalisatie is succesvol beëindigd.

Huidige functiewaarde: -23.241676

Iteraties: 4

Functiebeoordelingen: 18

Gradiëntevaluaties: 6

array([-1.67096375])

  • In dit voorbeeld wordt de optimalisatie uitgevoerd met behulp van het gradiëntafdalingsalgoritme vanaf het beginpunt
  • Maar het mogelijke probleem zijn lokale minima in plaats van mondiale minima. Als we geen buur van globale minima vinden, moeten we globale optimalisatie toepassen en de globale minima-functie vinden die wordt gebruikt als bassinhoppen() die lokale optimalisatie combineert.

optimize.basinhopping(functie, 0)

Output:

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

  • Het Nelder-Mead-algoritme selecteert via de methodeparameter.
  • Het biedt de meest eenvoudige manier om te minimaliseren voor een eerlijk gedrag.
  • Het Nelder – Mead-algoritme wordt niet gebruikt voor gradiëntevaluaties omdat het langer kan duren om de oplossing te vinden.
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")

Output:

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

Beeldverwerking met SciPy – scipy.ndimage

  • scipy.ndimage is een submodule van SciPy die vooral wordt gebruikt voor het uitvoeren van een afbeeldingsgerelateerde bewerking
  • ndimage betekent het “n”-dimensionale beeld.
  • SciPy Image Processing biedt geometrische transformatie (roteren, bijsnijden, spiegelen), beeldfiltering (scherp en scherp), weergavebeeld, beeldsegmentatie, classificatie en extractie van functies.
  • MISC-pakket in SciPy bevat vooraf gebouwde afbeeldingen die kunnen worden gebruikt om beeldmanipulatietaken uit te voeren

Voorbeeld: Laten we een voorbeeld van een geometrische transformatie van afbeeldingen nemen

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

Output:

Beeldverwerking met SciPy

Nu we Naar beneden klappen huidige afbeelding:

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

Output:

Beeldverwerking met SciPy

Voorbeeld: Rotatie van afbeelding met 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()

Output:

Beeldverwerking met SciPy

Integratie met Scipy – Numerieke integratie

  • Wanneer we een functie integreren waarbij analytische integratie niet mogelijk is, moeten we ons wenden tot numerieke integratie
  • SciPy biedt functionaliteit om functies te integreren met numerieke integratie.
  • scipy.integreren De bibliotheek heeft enkele integratie, dubbele, driedubbele, meervoudige, Gaussische kwadraten, Romberg-, trapezium- en Simpson-regels.

Voorbeeld: Neem nu een voorbeeld van Enkele integratie

Integratie met Scipy

Here a is de bovengrens en b is de ondergrens

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)

Output:

(0.33333333333333337, 3.700743415417189e-15)

Hier retourneert de functie twee waarden, waarbij de eerste waarde integratie is en de tweede waarde de geschatte fout in integraal.

Voorbeeld: Neem nu een SciPy-voorbeeld van dubbele integratie. We vinden de dubbele integratie van de volgende vergelijking,

Integratie met 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)

Output:

(3.0, 9.657432734515774e-14)

Je hebt die bovenstaande uitvoer gezien als dezelfde vorige.

Samenvatting

  • SciPy (uitgesproken als "Zucht Pi") is een open source Python-gebaseerde bibliotheek, die wordt gebruikt in wiskunde, wetenschappelijk computergebruik, techniek en technisch computergebruik.
  • SciPy bevat verschillende subpakketten die helpen bij het oplossen van de meest voorkomende problemen met betrekking tot wetenschappelijke berekeningen.
  • SciPy is bovenop de NumPy ingebouwd
Pakketnaam Beschrijving
scipy.io Bestandsinvoer/-uitvoer
pittig.speciaal Speciale functie
scipy.linalg Lineaire algebra Operatie
scipy.interpoleren interpolatie
scipy.optimize Optimalisatie en pasvorm
pittige.statistieken Statistieken en willekeurige getallen
scipy.integreren Numerieke integratie
scipy.fftpack Snelle Fourier-transformaties
scipy.signaal Signal In behandeling
scipy.ndimage Beeldmanipulatie –