SciPy'de Python Öğretici: Nedir, Kütüphane, İşlev ve Örnekler

SciPy'de Python

SciPy'de Python Matematiksel, bilimsel, mühendislik ve teknik problemlerin çözümü için kullanılan açık kaynaklı bir kütüphanedir. Kullanıcıların verileri manipüle etmesine ve çok çeşitli üst düzey yöntemler kullanarak verileri görselleştirmesine olanak tanır. Python komutlar. SciPy temel alınarak oluşturulmuştur Python NumPy uzantısı. SciPy aynı zamanda “Sigh Pi” olarak da telaffuz edilir.

SciPy'nin alt paketleri:

Neden SciPy'yi kullanmalısınız?

  • SciPy, Bilimsel Hesaplama ile ilgili en yaygın sorunların çözülmesine yardımcı olan çeşitli alt paketler içerir.
  • SciPy paketi Python C/ için GNU Bilimsel Kütüphanesinden sonra en çok kullanılan Bilimsel kütüphanedir.C++ veya Matlab'ınki.
  • Hızlı hesaplama gücünün yanı sıra kullanımı ve anlaşılması kolaydır.
  • Bir dizi NumPy kütüphanesinde çalışabilir.

Numpy VS SciPy

Dizi

  • Numpy, C dilinde yazılmıştır ve matematiksel veya sayısal hesaplamalar için kullanılır.
  • Diğerlerinden daha hızlıdır Python Kütüphaneler
  • Numpy, Veri Biliminin temel hesaplamaları gerçekleştirmesi için en kullanışlı kütüphanedir.
  • Numpy, sıralama, şekillendirme, indeksleme vb. gibi en temel işlemleri gerçekleştiren dizi veri türünden başka bir şey içermez.

scipy

  • SciPy, NumPy'nin üzerine inşa edilmiştir
  • SciPy modülü Python Lineer Cebir'in tam özellikli bir versiyonudur, Numpy ise yalnızca birkaç özellik içerir.
  • Yeni Veri Bilimi özelliklerinin çoğu, Numpy yerine Scipy'de mevcuttur.

SciPy – Kurulum ve Ortam Kurulumu

Ayrıca SciPy'yi de yükleyebilirsiniz. Windows pip aracılığıyla

Python3 -m pip install --user numpy scipy 

Scipy'yi Linux'a yükleyin

sudo apt-get install  python-scipy python-numpy

SciPy'yi Mac'e yükleyin

sudo port install py35-scipy py35-numpy

SciPy'yi öğrenmeye başlamadan önce Python, temel işlevlerin yanı sıra bir dizi dizinin farklı türlerini de bilmeniz gerekir. Dizi

SciPy modüllerini ve Numpy'yi içe aktarmanın standart yolu:

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

Dosya Giriş / Çıkış paketi

I/O paketi Scipy, Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV ve ikili format gibi farklı dosya formatlarıyla çalışmak için geniş bir fonksiyon yelpazesine sahiptir.

Bir dosya formatını ele alalım Python MatLab'da düzenli olarak kullanılan SciPy örneği:

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

Çıktı:

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

Kod Açıklama

  • Satır 1 ve 2: Temel SciPy kütüphanesini içeri aktarın Python G/Ç paketi ve Numpy ile.
  • Hat 3: 4 x 4 boyutlu bir dizi oluşturun
  • Hat 4: Diziyi şurada sakla örnek.mat dosyası.
  • Çizgi 5: Şuradan veri al: örnek.mat dosya
  • Hat 6: Çıktıyı yazdırın.

Özel Fonksiyon paketi

  • scipy.özel paket matematiksel fiziğin çok sayıda fonksiyonunu içerir.
  • SciPy özel işlevi Kübik Kök, Üstel, Log toplamı Üstel, Lambert, Permütasyon ve Kombinasyonlar, Gama, Bessel, hipergeometrik, Kelvin, beta, parabolik silindir, Göreli Hata Üstel, vb. içerir.
  • Tüm bu işlevlerin tek satırlık açıklaması için şunu yazın: Python konsol:
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.

Kübik Kök Fonksiyonu

Kübik Kök işlevi, değerlerin küp kökünü bulur.

Sözdizimi:

scipy.special.cbrt(x)

Örnek:

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

Çıktı: dizi([3., 4.])

Üstel Fonksiyon:

Üstel fonksiyon 10**x'i eleman bazında hesaplar.

Örnek:

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

Çıktı: [1.e+01 1.e+10]

Permütasyonlar ve Kombinasyonlar

SciPy ayrıca Permütasyonları ve Kombinasyonları hesaplamak için işlevsellik sağlar.

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

Örnek:

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)

Çıktı: 15.0

Permütasyonlar –

scipy.special.perm(N,k)

Örnek:

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

Çıktı: 20

Log Toplamı Üstel Fonksiyon

Günlük Toplamı Üstel, toplam üstel giriş öğesinin günlüğünü hesaplar.

sözdizimi:

scipy.special.logsumexp(x) 

Bessel İşlevi

N'inci tam sayı sırası hesaplama fonksiyonu

sözdizimi:

scipy.special.jn()

SciPy ile Doğrusal Cebir

  • SciPy'nin Doğrusal Cebiri, BLAS ve ATLAS LAPACK kütüphanelerinin bir uygulamasıdır.
  • Lineer Cebirin performansı BLAS ve LAPACK ile karşılaştırıldığında çok hızlıdır.
  • Doğrusal cebir rutini iki boyutlu dizi nesnesini kabul eder ve çıktı da iki boyutlu bir dizidir.

Şimdi biraz test yapalım scipy.linalg,

Hesaplanıyor determinant iki boyutlu bir matrisin,

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 )

Çıktı: -7.0

Ters Matris –

scipy.linalg.inv()

Ters Scipy Matrisi herhangi bir kare matrisin tersini hesaplar.

Görelim,

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 )

Çıktı:

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

Özdeğerler ve Özvektör

scipy.linalg.eig()

  • Lineer cebirde en sık karşılaşılan problem özdeğerler ve özvektörlerdir ve bunlar kullanılarak kolayca çözülebilir. eig()fonksiyonu.
  • Şimdi ('nin özdeğerini bulalım)X) ve iki boyutlu bir kare matrisin karşılık gelen özvektörü.

Örnek E-posta

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)

Çıktı:

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

Ayrık Fourier Dönüşümü - scipy.fftpack

  • DFT, konumsal verileri frekans verilerine dönüştürmek için kullanılan matematiksel bir tekniktir.
  • FFT (Hızlı Fourier Dönüşümü), DFT'yi hesaplamak için bir algoritmadır
  • FFT çok boyutlu bir diziye uygulanır.
  • Frekans, belirli bir zaman dilimindeki sinyal sayısını veya dalga boyunu tanımlar.

Örnek: Bir dalga alın ve Matplotlib kütüphanesini kullanarak gösterin. sin(20 × 2πt)'nin basit periyodik fonksiyon örneğini alıyoruz

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

Çıktı:

Ayrık Fourier Dönüşümü

Bunu görebilirsin. Frekansı 5 Hz'dir ve sinyali 1/5 saniyede tekrarlanır - belirli bir zaman dilimi olarak çağrıdır.

Şimdi bu sinüzoidal dalgayı DFT uygulaması yardımıyla kullanalım.

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

Çıktı:

Ayrık Fourier Dönüşümü

  • Çıktının tek boyutlu bir dizi olduğunu açıkça görebilirsiniz.
  • Karmaşık değerler içeren girdiler iki nokta hariç sıfırdır.
  • DFT örneğinde sinyalin büyüklüğünü görselleştiriyoruz.

SciPy'de Optimizasyon ve Uyum – scipy.optimize

  • Optimizasyon, eğri uydurmanın, çok boyutlu veya skaler ve kök uydurmanın en aza indirilmesi için yararlı bir algoritma sağlar.
  • Bir örnek verelim a Skaler Fonksiyon,Minimum skaler fonksiyonu bulmak için.
%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) 

Çıktı:

SciPy'de Optimizasyon ve Uyum

Optimizasyon başarıyla sonlandırıldı.

Mevcut fonksiyon değeri: -23.241676

Tekrarlar: 4

İşlev değerlendirmeleri: 18

Gradyan değerlendirmeleri: 6

dizi([-1.67096375])

  • Bu örnekte optimizasyon başlangıç ​​noktasından itibaren gradyan iniş algoritması yardımıyla yapılmaktadır.
  • Ancak olası sorun küresel minimumlar yerine yerel minimumlardır. Eğer global minimumun bir komşusunu bulamazsak, global optimizasyon uygulamamız ve şu şekilde kullanılan global minimum fonksiyonunu bulmamız gerekir: havuz atlama() yerel optimize ediciyi birleştiren.

optimize.basinhopping(işlev, 0)

Çıktı:

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 Algoritması:

  • Nelder-Mead algoritması yöntem parametresi aracılığıyla seçim yapar.
  • Adil davranan işlevi en aza indirmenin en basit yolunu sağlar.
  • Çözümün bulunması daha uzun zaman alabileceğinden gradyan değerlendirmelerinde Nelder – Mead algoritması kullanılmaz.
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")

Çıktı:

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

SciPy ile Görüntü İşleme – scipy.ndimage

  • scipy.ndimage, SciPy'nin çoğunlukla görüntüyle ilgili bir işlemi gerçekleştirmek için kullanılan bir alt modülüdür.
  • ndimage “n” boyutlu görüntü anlamına gelir.
  • SciPy Görüntü İşleme, Geometri dönüşümü (döndürme, kırpma, çevirme), görüntü filtreleme (keskin ve keskinleştirme), ekran görüntüsü, görüntü bölümlendirme, sınıflandırma ve özellik çıkarma sağlar.
  • ÇEŞİTLİ Paket SciPy'de, görüntü işleme görevini gerçekleştirmek için kullanılabilecek önceden oluşturulmuş görüntüler bulunur

Örnek: Görüntülerin geometrik dönüşüm örneğini ele alalım

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

Çıktı:

SciPy ile Görüntü İşleme

Şimdi biz Aşağı çevirmek Geçerli resim:

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

Çıktı:

SciPy ile Görüntü İşleme

Örnek: Scipy Kullanarak Görüntünün Döndürülmesi,

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

Çıktı:

SciPy ile Görüntü İşleme

Scipy ile Entegrasyon – Sayısal Entegrasyon

  • Analitik olarak entegrasyonun mümkün olmadığı herhangi bir fonksiyonu entegre ettiğimizde sayısal entegrasyona yönelmemiz gerekir.
  • SciPy, işlevi sayısal entegrasyonla entegre etme işlevselliği sağlar.
  • scipy.integrate Kütüphanede tekli integral, çiftli, üçlü, çoklu, Gauss karesel, Romberg, Trapezoidal ve Simpson kuralları bulunmaktadır.

Örnek: Şimdi bir örnek alalım Tek Entegrasyon

Scipy ile entegrasyon

İşte a üst sınırdır ve b alt sınırdır

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)

Çıktı:

(0.33333333333333337, 3.700743415417189e-15)

Burada fonksiyon iki değer döndürür; burada birinci değer integral, ikinci değer ise integraldeki tahmini hatadır.

Örnek: Şimdi bir SciPy örneğini ele alalım: çift ​​entegrasyon. Aşağıdaki denklemin çift entegrasyonunu buluyoruz,

Scipy ile entegrasyon

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)

Çıktı:

(3.0, 9.657432734515774e-14)

Yukarıdaki çıktının bir öncekiyle aynı olduğunu gördünüz.

ÖZET

  • SciPy (“Sigh Pi” olarak telaffuz edilir) Açık Kaynaktır Pythonmatematik, bilimsel hesaplama, Mühendislik ve teknik hesaplamada kullanılan tabanlı kütüphane.
  • SciPy, Bilimsel Hesaplama ile ilgili en yaygın sorunların çözülmesine yardımcı olan çeşitli alt paketler içerir.
  • SciPy, NumPy'nin üzerine inşa edilmiştir
paket Adı Açıklama
scipy.io Dosya girişi/çıkışı
scipy.özel özel Fonksiyon
scipy.linalg Doğrusal Cebir Operayon
scipy.interpolasyon interpolasyon
scipy.optimize Optimizasyon ve uyum
scipy.stats İstatistikler ve rastgele sayılar
scipy.integrate Sayısal entegrasyon
scipy.fftpack Hızlı Fourier dönüşümleri
scipy.signal Signal İşlemde
scipy.ndimage Görüntü manipülasyonu –