SciPy w Python Samouczek: Co to jest, biblioteka, funkcja i przykłady
SciPy w Python
SciPy w Python to biblioteka typu open source służąca do rozwiązywania problemów matematycznych, naukowych, inżynieryjnych i technicznych. Pozwala użytkownikom manipulować danymi i wizualizować dane przy użyciu szerokiego zakresu wysokiego poziomu Python polecenia. SciPy jest zbudowany na Python Rozszerzenie NumPy. SciPy jest również wymawiane jako „Sigh Pi”.
Podpakiety SciPy:
- Wejście/wyjście pliku – scipy.io
- Specjalna funkcja - scipy.special
- Algebra liniowa Operacja – scipy.linalg
- Interpolacja – scipy.interpolacja
- Optymalizacja i dopasowanie – scipy.optymalizacja
- Statystyki i liczby losowe – scipy.stats
- Całkowanie numeryczne – scipy.integrate
- Szybka transformata Fouriera – scipy.fftpack
- Signal Przetwarzanie – scipy.sygnał
- Manipulacja obrazem – scipy.ndimage
Dlaczego warto używać SciPy
- SciPy zawiera różne podpakiety, które pomagają rozwiązać najczęstszy problem związany z obliczeniami naukowymi.
- Pakiet SciPy w Python jest najczęściej używaną biblioteką naukową, zaraz po Bibliotece Naukowej GNU dla C/C++ lub Matlaba.
- Łatwy w użyciu i zrozumieniu, a także szybka moc obliczeniowa.
- Może operować na tablicy bibliotek NumPy.
Numpy kontra SciPy
Odrętwiały
- Numpy jest napisany w C i służy do obliczeń matematycznych lub numerycznych.
- Jest szybszy niż inne Python biblioteki
- Numpy to najbardziej przydatna biblioteka dla Data Science do wykonywania podstawowych obliczeń.
- Numpy zawiera wyłącznie tablicę danych, która wykonuje najbardziej podstawowe operacje, takie jak sortowanie, kształtowanie, indeksowanie itp.
SciPy
- SciPy jest wbudowany w NumPy
- Moduł SciPy w Python to w pełni funkcjonalna wersja algebry liniowej, podczas gdy Numpy zawiera tylko kilka funkcji.
- Większość nowych funkcji Data Science jest dostępna w Scipy, a nie w Numpy.
SciPy – instalacja i konfiguracja środowiska
Możesz także zainstalować SciPy w Windows przez pipa
Python3 -m pip install --user numpy scipy
Zainstaluj Scipy na Linuksie
sudo apt-get install python-scipy python-numpy
Zainstaluj SciPy na komputerze Mac
sudo port install py35-scipy py35-numpy
Zanim zaczniemy uczyć się SciPy Python, musisz znać podstawową funkcjonalność, a także różne typy tablic numpy
Standardowy sposób importowania modułów SciPy i Numpy:
from scipy import special #same for other modules import numpy as np
Pakiet wejścia/wyjścia pliku
Scipy, pakiet I/O, posiada szeroką gamę funkcji do pracy z różnymi formatami plików, takimi jak Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV i format binarny.
Weźmy jeden format pliku Python Przykład SciPy, które są regularnie używane w MatLabie:
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']
Wyjście:
array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
Objaśnienie kodu
- Linia 1 i 2: Zaimportuj niezbędną bibliotekę SciPy do formatu Python z pakietem I/O i Numpy.
- linia 3: Utwórz tablicę wymiarową 4 x 4
- linia 4: Zapisz tablicę w przykład.mat plik.
- Linia 5: Pobierz dane z przykład.mat filet
- linia 6: Wydruk.
Pakiet funkcji specjalnych
- scipy.special pakiet zawiera liczne funkcje fizyki matematycznej.
- Specjalna funkcja SciPy obejmuje pierwiastek sześcienny, wykładniczy, sumę logarytmiczną wykładniczą, Lamberta, permutację i kombinacje, gamma, Bessela, hipergeometryczną, Kelvina, beta, cylinder paraboliczny, wykładniczy błąd względny itp.
- Aby uzyskać opis wszystkich tych funkcji w jednym wierszu, wpisz Python konsola:
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.
Funkcja pierwiastka sześciennego
Funkcja Cubic Root znajduje pierwiastek sześcienny wartości.
Składnia:
scipy.special.cbrt(x)
Przykład:
from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb)
Wyjście: tablica([3., 4.])
Funkcja wykładnicza:
Funkcja wykładnicza oblicza 10**x element po elemencie.
Przykład:
from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp)
Wyjście: [1.e+01 1.e+10]
Permutacje i kombinacje
SciPy zapewnia także funkcjonalność obliczania permutacji i kombinacji.
Kombinacje – scipy.special.comb(R,k)
Przykład:
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)
Wyjście: 15.0
Permutacje –
scipy.special.perm(N,k)
Przykład:
from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per)
Wyjście: 20
Funkcja wykładnicza log sumy
Log Sum Exponential oblicza log sumy wykładniczej elementu wejściowego.
Składnia :
scipy.special.logsumexp(x)
Funkcja Bessela
Funkcja obliczania N-tego rzędu liczb całkowitych
Składnia :
scipy.special.jn()
Algebra liniowa z SciPy
- Algebra liniowa SciPy jest implementacją bibliotek BLAS i ATLAS LAPACK.
- Wydajność algebry liniowej jest bardzo szybka w porównaniu do BLAS i LAPACK.
- Procedura algebry liniowej akceptuje dwuwymiarowy obiekt tablicowy, a wynikiem jest również tablica dwuwymiarowa.
Teraz przeprowadźmy test z scipy.linalg,
Obliczenie wyznacznik dwuwymiarowej macierzy,
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 )
Wyjście: -7.0
Odwrotna macierz –
scipy.linalg.inv()
Odwrotna macierz Scipy oblicza odwrotność dowolnej macierzy kwadratowej.
Zobaczmy,
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 )
Wyjście:
array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )
Wartości własne i wektor własny
scipy.linalg.eig()
- Najczęstszym problemem algebry liniowej są wartości własne i wektory własne, które można łatwo rozwiązać za pomocą eig()funkcja.
- Teraz znajdźmy wartość własną (X) i odpowiadają wektorowi własnemu dwuwymiarowej macierzy kwadratowej.
Przykład
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)
Wyjście:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
Dyskretna transformata Fouriera – scipy.fftpack
- DFT to technika matematyczna stosowana do przekształcania danych przestrzennych na dane częstotliwościowe.
- FFT (szybka transformacja Fouriera) to algorytm obliczania DFT
- FFT jest stosowana do tablicy wielowymiarowej.
- Częstotliwość określa liczbę sygnałów lub długości fali w danym okresie czasu.
Przykład: Zrób falę i pokaż, używając biblioteki Matplotlib. bierzemy prosty przykład funkcji okresowej 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()
Wyjście:
Możesz to zobaczyć. Częstotliwość wynosi 5 Hz, a jej sygnał powtarza się co 1/5 sekundy – jest to wywołanie określonego okresu czasu.
Teraz wykorzystajmy tę falę sinusoidalną za pomocą aplikacji DFT.
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()
Wyjście:
- Wyraźnie widać, że wynik jest tablicą jednowymiarową.
- Dane wejściowe zawierające wartości zespolone to zero, z wyjątkiem dwóch punktów.
- W przykładzie DFT wizualizujemy wielkość sygnału.
Optymalizacja i dopasowanie w SciPy – scipy.optimize
- Optymalizacja zapewnia użyteczny algorytm minimalizacji dopasowania krzywej, wielowymiarowego lub skalarnego i dopasowania pierwiastkowego.
- Weźmy przykład funkcja skalarna,znaleźć minimalną funkcję skalarną.
%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)
Wyjście:
Optymalizacja zakończyła się pomyślnie.
Aktualna wartość funkcji: -23.241676
Iteracje: 4
Oceny funkcji: 18
Oceny gradientowe: 6
tablica([-1.67096375])
- W tym przykładzie optymalizacja odbywa się za pomocą algorytmu gradientowego opadania od punktu początkowego
- Ale możliwym problemem są minima lokalne zamiast minimów globalnych. Jeśli nie znajdziemy sąsiada minimów globalnych, musimy zastosować optymalizację globalną i znaleźć funkcję minimów globalnych użytą jako skakanie do basenu() który łączy lokalny optymalizator.
optymalizacji.basinhopping(funkcja, 0)
Wyjście:
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 – Algorytm Miodów:
- Algorytm Neldera-Meada wybiera parametr metody.
- Zapewnia najprostszy sposób minimalizacji dla funkcji o prawidłowym zachowaniu.
- Algorytm Neldera – Meada nie jest używany do oceny gradientu, ponieważ znalezienie rozwiązania może zająć więcej czasu.
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")
Wyjście:
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])
Przetwarzanie obrazu za pomocą SciPy – scipy.ndimage
- scipy.ndimage to podmoduł SciPy, który jest używany głównie do wykonywania operacji związanych z obrazami
- ndimage oznacza obraz „n” wymiarowy.
- SciPy Image Processing zapewnia transformację geometrii (obracanie, przycinanie, odwracanie), filtrowanie obrazu (ostrość i usuwanie), wyświetlanie obrazu, segmentację obrazu, klasyfikację i ekstrakcję cech.
- Pakiet RÓŻNY w SciPy zawiera gotowe obrazy, które można wykorzystać do wykonania zadania manipulacji obrazami
Przykład: Weźmy przykład transformacji geometrycznej obrazów
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()
Wyjście:
Teraz my Opuść się aktualne zdjęcie:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Wyjście:
Przykład: Obrót obrazu za pomocą 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()
Wyjście:
Integracja z Scipy – Integracja Numeryczna
- Kiedy integrujemy jakąkolwiek funkcję, gdzie integracja analityczna nie jest możliwa, musimy zwrócić się w stronę integracji numerycznej
- SciPy zapewnia funkcjonalność umożliwiającą integrację funkcji z integracją numeryczną.
- scipy.integrate biblioteka zawiera całkowanie pojedyncze, podwójne, potrójne, wielokrotne, kwadratowe Gaussa, Romberga, trapezowe i Simpsona.
Przykład: A teraz weź przykład Pojedyncza integracja
Tutaj a jest górną granicą i b jest dolną granicą
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)
Wyjście:
(0.33333333333333337, 3.700743415417189e-15)
Tutaj funkcja zwraca dwie wartości, gdzie pierwsza wartość to całkowanie, a druga wartość to szacowany błąd całki.
Przykład: Teraz weźmy przykład SciPy podwójna całkowanie. Znajdujemy podwójną całkę następującego równania:
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)
Wyjście:
(3.0, 9.657432734515774e-14)
Widziałeś powyższy wynik jako ten sam poprzedni.
Podsumowanie
- SciPy (wymawiane jako „Sigh Pi”) jest oprogramowaniem typu open source Python- biblioteka, która jest używana w matematyce, obliczeniach naukowych, inżynierii i obliczeniach technicznych.
- SciPy zawiera różne podpakiety, które pomagają rozwiązać najczęstszy problem związany z obliczeniami naukowymi.
- SciPy jest wbudowany w NumPy
Nazwa Pakietu | Opisy Konstrukcyjne |
---|---|
scipy.io | Wejście/wyjście pliku |
scipy.special | Funkcje specjalne |
scipy.linalg | Algebra liniowa Operacja |
scipy.interpolacja | Interpolacja |
scipy.optymalizacja | Optymalizacja i dopasowanie |
scipy.stats | Statystyki i liczby losowe |
scipy.integrate | Całkowanie numeryczne |
scipy.fftpack | Szybkie transformaty Fouriera |
scipy.sygnał | Signal Przetwarzanie |
scipy.ndimage | Manipulacja obrazem – |