Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

SciPy en Python : tutoriel complet sur les bibliothèques et fonctions

SciPy en Python : tutoriel complet sur les bibliothèques et fonctions

SciPy en Python

SciPy est une bibliothèque open-source qui étend NumPy pour fournir des outils pour résoudre des problèmes mathématiques, scientifiques, d'ingénierie et techniques. Construite sur NumPy, SciPy offre un large ensemble de commandes de haut niveau pour la manipulation et la visualisation de données.

Sous-packages

Ce tutoriel couvre :

Pourquoi utiliser SciPy ?

NumPy vs SciPy

NumPy

SciPy

Installation et configuration de l'environnement

Installez SciPy avec pip ou les gestionnaires de paquets système :

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

Importez SciPy et NumPy dans vos scripts :

from scipy import special
import numpy as np

Entrée/Sortie de fichiers avec scipy.io

Sauvegarder et charger facilement des fichiers MATLAB .mat :

import numpy as np
from scipy import io as sio

array = np.ones((4, 4))
sio.savemat('exemple.mat', {'ar': array})
chargé = sio.loadmat('exemple.mat', struct_as_record=True)
print(chargé['ar'])

Sortie :

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

Fonctions spéciales – scipy.special

Exemples de fonctions spéciales couramment utilisées :

Algèbre linéaire – scipy.linalg

Calculer déterminant, inverse, valeurs propres et vecteurs propres :

from scipy import linalg
import numpy as np

A = np.array([[4,5],[3,2]])
print(linalg.det(A))        # -7.0
print(linalg.inv(A))        # matrice inverse
vals, vecs = linalg.eig(A)
print(vals)
print(vecs)

Sortie :

-7.0
array([[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]])
[ 9.+0.j -1.+0.j]
[[ 0.70710678 -0.5547002 ]
 [ 0.70710678  0.83205029]]

Transformée de Fourier discrète – scipy.fftpack

Transformer un sinusoïde et visualiser son spectre :

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

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)
plt.plot(t, wave)
plt.xlabel('Temps (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Fréquence (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

Optimisation – scipy.optimize

Trouver le minimum d'une fonction scalaire en utilisant BFGS et recherche globale avec basin-hopping :

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('Résultat BFGS :', min_bfgs)

min_basin = optimize.basinhopping(func, 0)
print('Résultat Basin-hopping :', min_basin.x)

La sortie montre le minimum local trouvé par BFGS et l'optimum global confirmé par basin-hopping.

Algorithme Nelder-Mead

Minimisation simple sans contrainte sans information de gradient :

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('Résultat :', res.x, 'Valeur fonction :', res.fun)

Traitement d'image – scipy.ndimage

Manipuler des images : afficher, retourner, pivoter, et appliquer des filtres.

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Retourné verticalement')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Pivoté 135°')
plt.show()

Intégration numérique – scipy.integrate

Intégrales simples et doubles avec estimation d'erreur automatique :

from scipy import integrate

# Intégrale simple de x^2 de 0 à 1
simple = integrate.quad(lambda x: x**2, 0, 1)
print('Intégrale simple :', simple)

# Intégrale double de 64*x*y sur un domaine triangulaire
double = integrate.dblquad(lambda x, y: 64*x*y, 0, 2/4,
                           lambda x: 0,
                           lambda y: (1 - 2*y**2)**0.5)
print('Intégrale double :', double)

Les deux renvoient un tuple : (valeur, erreur estimée).

Résumé

SciPy étend NumPy pour fournir une pile complète de calcul scientifique, incluant algèbre linéaire, optimisation, statistiques, traitement de signal et manipulation d'image. Ses sous-packages étendus et son support communautaire robuste la rendent indispensable pour chercheurs et ingénieurs.

Nom du packageDescription
scipy.ioEntrée/sortie fichiers pour MATLAB, CSV, NetCDF, etc.
scipy.specialFonctions mathématiques spéciales (Bessel, Gamma, etc.)
scipy.linalgRoutines d'algèbre linéaire avancées
scipy.interpolateMéthodes d'interpolation
scipy.optimizeOutils d'optimisation et d'ajustement de courbes
scipy.statsDistributions statistiques & génération nombres aléatoires
scipy.integrateIntégration numérique (quad, dblquad, etc.)
scipy.fftpackTransformées de Fourier rapides
scipy.signalUtilitaires de traitement de signal
scipy.ndimageTraitement d'image multi-dimensionnel

Python

  1. Fonction Python print() : Guide pratique avec exemples
  2. Maîtriser str.count() de Python : Compter caractères et sous-chaînes avec exemples
  3. Maîtriser les fonctions lambda Python : exemples pratiques et bonnes pratiques
  4. Fonction Python abs() : calculer les valeurs absolues pour nombres et nombres complexes
  5. Fonction Python round() expliquée avec exemples pratiques
  6. Maîtriser la fonction Python map() : syntaxe, exemples et bonnes pratiques
  7. Python timeit() : mesurer le temps d'exécution avec exemples pratiques
  8. Maîtriser yield en Python : générateur vs return – Guide pratique
  9. Comprendre type() et isinstance() en Python : exemples pratiques