Tutorial SciPy: che cos'è Python SciPy e come usarlo?



SciPy è una libreria Python utilizzata per risolvere problemi scientifici e matematici. NumPy vs SciPy. Base, Speciale, Integrazione, Ottimizzazione, ecc. Con esempi.

La matematica si occupa di un numero enorme di concetti che sono molto importanti ma allo stesso tempo complessi e richiedono tempo. Tuttavia, fornisce la libreria SciPy a tutti gli effetti che risolve questo problema per noi. In questo tutorial di SciPy imparerai come utilizzare questa libreria insieme ad alcune funzioni e ai relativi esempi.

Prima di proseguire, dai un'occhiata a tutti gli argomenti discussi in questo articolo:





Quindi iniziamo. :)

Cos'è SciPy?

SciPy è una libreria Python open source che viene utilizzata per risolvere problemi scientifici e matematici. È costruito su estensione e consente all'utente di manipolare e visualizzare i dati con un'ampia gamma di comandi di alto livello. Come accennato in precedenza, SciPy si basa su NumPy e quindi se importi SciPy, non è necessario importare NumPy.



NumPy vs SciPy

Sia NumPy che SciPy lo sono utilizzato per l'analisi matematica e numerica utilizzata. NumPy contiene i dati dell'array e le operazioni di base come l'ordinamento, l'indicizzazione, ecc. Mentre SciPy è costituito da tutto il codice numerico. Sebbene NumPy fornisca una serie di che può aiutare a risolvere l'algebra lineare, trasformate di Fourier, ecc., SciPy è la libreria che in realtà contiene versioni complete di queste funzioni insieme a molte altre. Tuttavia, se stai facendo analisi scientifiche usando Python, dovrai installare sia NumPy che SciPy poiché SciPy si basa su NumPy.

Sottopacchetti in SciPy:

SciPy ha una serie di sottopacchetti per vari calcoli scientifici che sono mostrati nella tabella seguente:

NomeDescrizione
grappoloAlgoritmi di clustering
costantiCostanti fisiche e matematiche
fftpackRoutine veloci della trasformata di Fourier
integrareRisolutori di integrazione e di equazioni differenziali ordinarie
interpolareSpline di interpolazione e levigatura
ioIngresso e uscita
linalgAlgebra lineare
io voloElaborazione di immagini N-dimensionali
odrRegressione ortogonale della distanza
ottimizzareRoutine di ottimizzazione e ricerca delle radici
segnaleElaborazione del segnale
sparseMatrici sparse e routine associate
spazialeStrutture e algoritmi di dati spaziali
specialeFunzioni speciali
statisticheDistribuzioni e funzioni statistiche

Tuttavia, per una descrizione dettagliata, puoi seguire il documentazione ufficiale .



Questi pacchetti devono essere importati esclusivamente prima di utilizzarli. Per esempio:

dal cluster di importazione di scipy

Prima di esaminare ciascuna di queste funzioni in dettaglio, diamo prima un'occhiata alle funzioni comuni sia in NumPy che in SciPy.

Funzioni base:

Interazione con NumPy:

SciPy si basa su NumPy e quindi puoi utilizzare le funzioni NumPy per gestire gli array. Per conoscere in profondità queste funzioni, puoi semplicemente usare le funzioni help (), info () o source ().

Aiuto():

Per ottenere informazioni su qualsiasi funzione, puoi utilizzare il file Aiuto() funzione. Esistono due modi in cui questa funzione può essere utilizzata:

  • senza parametri
  • utilizzando parametri

Ecco un esempio che mostra entrambi i metodi sopra:

da scipy import cluster help (cluster) #with parameter help () #without parameter

Quando esegui il codice precedente, il primo help () restituisce le informazioni sul file grappolo sottomodulo. Il secondo help () chiede all'utente di inserire il nome di qualsiasi modulo, parola chiave, ecc. Per il quale l'utente desidera cercare informazioni. Per interrompere l'esecuzione di questa funzione, digita semplicemente 'quit' e premi invio.

Informazioni():

Questa funzione restituisce informazioni sull'oggetto desiderato , moduli, ecc.

scipy.info (cluster)

fonte():

Il codice sorgente viene restituito solo per gli oggetti scritti in . Questa funzione non restituisce informazioni utili nel caso in cui i metodi o gli oggetti siano scritti in qualsiasi altro linguaggio come C. Tuttavia, nel caso in cui si desideri utilizzare questa funzione, è possibile farlo come segue:

scipy.source (cluster)

Funzioni speciali:

SciPy fornisce una serie di funzioni speciali utilizzate nella fisica matematica come l'ellittica, funzioni convenienza, gamma, beta, ecc.Per cercare tutte le funzioni, puoi usare la funzione help () come descritto in precedenza.

Funzioni esponenziali e trigonometriche:

Il pacchetto di funzioni speciali di SciPy fornisce una serie di funzioni attraverso le quali è possibile trovare esponenti e risolvere problemi trigonometrici.

Considera il seguente esempio:

ESEMPIO:

da scipy import special a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( d)

PRODUZIONE:

1000.0
8.0
1.0
0.7071067811865475

Ci sono molte altre funzioni presenti nel pacchetto di funzioni speciali di SciPy che puoi provare tu stesso.

def __init __ (self)

Funzioni di integrazione:

SciPy fornisce una serie di funzioni per risolvere gli integrali. Spaziando dall'ordinario integratore differenziale all'uso di regole trapezoidali per calcolare gli integrali, SciPy è un magazzino di funzioni per risolvere tutti i tipi di problemi di integrali.

Integrazione generale:

SiPy fornisce una funzione denominata quad per calcolare l'integrale di una funzione che ha una variabile. I limiti possono essere ± & infin(± inf) per indicare limiti infiniti. La sintassi della funzione quad () è la seguente:

SINTASSI:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, points = None, weight = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

Qui, la funzione sarà integrata tra i limiti aeb (può anche essere infinita).

ESEMPIO:

from scipy import special from scipy import integrate a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

Nell'esempio precedente, la funzione 'a' viene valutata tra i limiti 0, 1. Quando questo codice viene eseguito, vedrai il seguente output.

PRODUZIONE:

(3.9086503371292665, 4.3394735994897923e-14)

Doppia funzione integrale:

SciPy fornisce dblquad che può essere utilizzato per calcolare i doppi integrali. Un doppio integrale, come molti di noi sanno, è costituito da due variabili reali. La funzione dblquad () prenderà come parametro la funzione da integrare insieme ad altre 4 variabili che definiscono i limiti e le funzioni dy e dx.

ESEMPIO:

dall'importazione di scipy integrate a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

PRODUZIONE:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy fornisce varie altre funzioni per valutare integrali tripli, integrali n, integrali Romberg, ecc. Che puoi esplorare ulteriormente in dettaglio. Per trovare tutti i dettagli sulle funzioni richieste, utilizzare la funzione di aiuto.

Funzioni di ottimizzazione:

Scipy.optimize fornisce una serie di algoritmi di ottimizzazione comunemente usati che possono essere visualizzati utilizzando la funzione di aiuto.

Fondamentalmente è costituito da quanto segue:

  • Minimizzazione non vincolata e vincolata di funzioni scalari multivariate, ovvero minimizzare (ad es. BFGS, Newton Conjugate Gradient, Nelder_mead simplex, ecc.)
  • Routine di ottimizzazione globale (es. Differenziale_evolution, dual_annealing, ecc.)
  • Minimizzazione dei minimi quadrati e adattamento della curva (ad es. Minimi_quadrati, curve_fit, ecc.)
  • Funzioni univariate scalari minimizzatori e root finder (es. Minimizzare_scalare e radice_scalare)
  • Risolutori di sistemi di equazioni multivariati che utilizzano algoritmi come Powell ibrido, Levenberg-Marquardt.

Funzione Rosenbrook:

Funzione Rosenbrook ( Rosen ) è un problema di test utilizzato per algoritmi di ottimizzazione basati su gradiente. È definito come segue in SciPy:

rosen-Scipy tutorial-edurekaESEMPIO:

importa numpy come np da scipy.optimize import rosen a = 1.2 * np.arange (5) rosen (a)

PRODUZIONE: 7371.0399999999945

Nelder-Mead:

IlNelder–Il metodo Mead è un metodo numerico spesso utilizzato per trovare il minimo / massimo di una funzione in uno spazio multidimensionale. Nell'esempio seguente, il metodo di riduzione a icona viene utilizzato insieme all'algoritmo Nelder-Mead.

ESEMPIO:

dall'importazione di scipy ottimizzare a = [2.4, 1.7, 3.1, 2.9, 0.2] b = ottimizzare.minimize (ottimizzare.rosen, a, metodo = 'Nelder-Mead') b.x

PRODUZIONE: matrice ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])

Funzioni di interpolazione:

Nel campo dell'analisi numerica, l'interpolazione si riferisce alla costruzione di nuovi punti dati all'interno di un insieme di punti dati noti. La libreria SciPy è costituita da un sottopacchetto denominato scipy.interpolate composto dafunzioni e classi spline, classi di interpolazione unidimensionali e multidimensionali (univariate e multivariate), ecc.

Interpolazione univariata:

L'interpolazione univariata è fondamentalmente un'area di adattamento della curva chetrova la curva che fornisce un adattamento esatto a una serie di punti dati bidimensionali. SciPy fornisce interp1d funzione che può essere utilizzata per produrre interpolazione univariata.

ESEMPIO:

importa matplotlib.pyplot come plt da scipy importa 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) # usa la funzione di interpolazione restituita da `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

PRODUZIONE:

Interpolazione multivariata:

Interpolazione multivariata(spazialeinterpolazione) è un tipointerpolazionesu funzioni che consistono in più di una variabile. L'esempio seguente mostra un esempio di interp2d funzione.
L'interpolazione su una griglia 2-D utilizzando la funzione interp2d (x, y, z) utilizzerà fondamentalmente gli array x, y, z per approssimare alcune funzioni f: 'z = f (x, y)' e restituisce una funzione il cui metodo di chiamata utilizza interpolazione spline per trovare il valore di nuovi punti.
ESEMPIO:

da scipy import interpolate import matplotlib.pyplot come plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'cubic') 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 ()

PRODUZIONE:

Funzioni della trasformata di Fourier:

L'analisi di Fourier è un metodo che si occupa di esprimere una funzione come somma di componenti periodiche e di recuperare il segnale da tali componenti. Il fft le funzioni possono essere utilizzate per restituire il filetrasformata discreta di Fourier di una sequenza reale o complessa.

ESEMPIO:

da scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)

PRODUZIONE: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Allo stesso modo, puoi trovare l'inverso di questo usando il ifft funzionare come segue:

ESEMPIO:

ottenere la dimensione dell'array javascript
rom scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)

PRODUZIONE: [1,5 + 0, j -0,5-0,5 j -0,5 + 0, j -0,5 + 0,5 j]

Funzioni di elaborazione del segnale:

Si occupa di elaborazione del segnaleanalizzare, modificare e sintetizzare segnali come suoni, immagini, ecc. SciPy fornisce alcune funzioni con le quali è possibile progettare, filtrare e interpolare dati unidimensionali e bidimensionali.

Filtraggio:

Filtrando un segnale, sostanzialmente rimuovi i componenti indesiderati da esso. Per eseguire il filtraggio ordinato, puoi utilizzare il file order_filter funzione. Questa funzione fondamentalmente esegue il filtraggio ordinato su un array. La sintassi di questa funzione è la seguente:

SINTASSI:
order_filter (a, domain, rank)

a = matrice di input N-dimensionale

dominio = array di maschere con lo stesso numero di dimensioni di 'a'

rank = numero non negativo che seleziona gli elementi dall'elenco dopo che è stato ordinato (0 è il più piccolo seguito da 1 ...)

ESEMPIO:

dal segnale di importazione di scipy x = np.arange (35) .reshape (7, 5) dominio = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))

PRODUZIONE:

[[0 1 2 3 4]
[5 6 7 8 9]
[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.]
[quindici. 16. 17. 18. 13.]
[venti. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Forme d'onda:

Il sottopacchetto scipy.signal consiste anche di varie funzioni che possono essere utilizzate per generare forme d'onda. Una di queste funzioni è cinguettio . Questa funzione è una fgeneratore di coseno con spostamento di frequenza e la sintassi è la seguente:

SINTASSI:
chirp (t, f0, t1, f1, method = ’linear’, phi = 0, vertex_zero = True)

dove,

ESEMPIO:

from scipy.signal import chirp, spectrogram 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 ('time in sec)') plt.show ()

PRODUZIONE:

Algebra lineare:

L'algebra lineare si occupa delle equazioni lineari e delle loro rappresentazioni utilizzando spazi vettoriali e matrici. SciPy è costruitoLibrerie ATLAS LAPACK e BLAS ed èestremamente veloce nella risoluzione di problemi legati all'algebra lineare. Oltre a tutte le funzioni di numpy.linalg, scipy.linalg fornisce anche una serie di altre funzioni avanzate. Inoltre, se numpy.linalg non viene utilizzato insieme aSupporto per ATLAS LAPACK e BLAS, scipy.linalg è più veloce di numpy.linalg.

Trovare l'inverso di una matrice:

Matematicamente, l'inverso di una matrice Aè la matriceBtale cheAB = Idoveioè la matrice identità costituita da quelle lungo la diagonale principale indicata comeB = A-uno. In SciPy, questo inverso può essere ottenuto utilizzando il linalg.inv metodo.

ESEMPIO:

importa numpy come np da scipy importa linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)

PRODUZIONE:

[[-0,6 0,4]
[0,8 -0,2]]

Trovare i determinanti:

Il valore derivato aritmeticamente dai coefficienti della matrice è noto come determinante di una matrice quadrata. In SciPy, questo può essere fatto utilizzando una funzione il che ha la seguente sintassi:

SINTASSI:
det (a, overwrite_a = False, check_finite = True)
dove,

a: (M, M) è una matrice quadrata

overwrite_a (bool, opzionale): consente la sovrascrittura dei dati in un file

check_finite (bool, opzionale): per verificare se la matrice di input consiste solo di numeri finiti

ESEMPIO:

importa numpy come np da scipy importa linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

PRODUZIONE: -5.0

Autovalori sparsi:

Gli autovalori sono un insieme specifico di scalari collegati con equazioni lineari. L'ARPACK fornisce che ti permettono di trovare autovalori (autovettori) abbastanza velocemente. La funzionalità completa di ARPACK è racchiusa indue interfacce di alto livello che sono scipy.sparse.linalg.eigs e scipy.sparse.linalg.eigsh. eigs. L'interfaccia eigs consente di trovare gli autovalori di matrici quadrate non simmetriche reali o complesse, mentre l'interfaccia eigsh contiene interfacce per matrici simmetriche reali o complesse-hermitiane.

Il eigh risolve un problema di autovalori generalizzato per una matrice Hermitiana complessa o reale simmetrica.

ESEMPIO:

from 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 ('Autovalori selezionati:', a) print ('Complex ndarray:', b)

PRODUZIONE:

Autovalori selezionati: [-2.53382695 1.66735639 3.69488657 12.17158399]
Ndarray complesso: [[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]]

Strutture e algoritmi di dati spaziali:

I dati spaziali sono fondamentalmente costituiti da oggetti costituiti da linee, punti, superfici, ecc. Il pacchetto scipy.spatial di SciPy può calcolareDiagrammi Voronoi, triangolazioni, ecc. Utilizzando la libreria Qhull. Consiste anche nelle implementazioni di KDTree per le query del punto vicino più vicino.

Triangolazioni di Delaunay:

Matematicamente, le triangolazioni di Delaunay per un insieme di punti discreti in un piano sono una triangolazione tale che nessun punto nel dato insieme di punti èall'interno del circumcircle di qualsiasi triangolo.

ESEMPIO:

import matplotlib.pyplot come plt da scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (points) #Delaunay object print (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'o') plt.show ()

PRODUZIONE:

Funzioni di elaborazione delle immagini multidimensionali:

L'elaborazione delle immagini si occupa fondamentalmente di eseguire operazioni su un'immagine per recuperare informazioni o per ottenere un'immagine migliorata da quella originale. Il pacchetto scipy.ndimage è costituito da un numero di filefunzioni di elaborazione e analisi delle immagini progettate per lavorare con array di dimensionalità arbitraria.

Convoluzione e correlazione:

SciPy fornisce una serie di funzioni che consentono la correlazione e la convoluzione delle immagini.

  • La funzione correl1d può essere utilizzato per calcolare la correlazione unidimensionale lungo un dato asse
  • La funzione correlare consente la correlazione multidimensionale di un dato array con il kernel specificato
  • La funzione convolve1d può essere utilizzato per calcolare la convoluzione unidimensionale lungo un dato asse
  • La funzione convolgere consente la convoluzione multidimensionale di un dato array con il kernel specificato

ESEMPIO:

importa numpy come np da scipy.ndimage import correl1d correl1d ([3,5,1,7,2,6,9,4], weights = [1,2])

PRODUZIONE: matrice ([9, 13, 7, 15, 11, 14, 24, 17])

File IO:

Il pacchetto scipy.io fornisce una serie di funzioni che ti aiutano a gestire file di diversi formati come file MATLAB, file IDL, file Matrix Market, ecc.

Per utilizzare questo pacchetto, sarà necessario importarlo come segue:

importa scipy.io come sio

Per informazioni complete sul sottopacchetto, è possibile fare riferimento al documento ufficiale su File IO .

Questo ci porta alla fine di questo tutorial di SciPy. Spero tu abbia capito tutto chiaramente. Assicurati di esercitarti il ​​più possibile .

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questo blog 'SciPy Tutorial' e ti risponderemo il prima possibile.

Per ottenere una conoscenza approfondita di Python e delle sue varie applicazioni, puoi iscriverti a live con supporto 24 ore su 24, 7 giorni su 7 e accesso a vita.