SciPy Eğitimi: SciPy Nedir? (Örneklerle)

⚡ Akıllı Özet

SciPy açık kaynaklı bir yazılımdır. Python NumPy üzerine kurulu, bilimsel ve teknik hesaplamalar için bir kütüphane. Burada, dosya giriş/çıkışı, doğrusal cebir, optimizasyon, Fourier dönüşümleri, entegrasyon ve görüntü işleme için başlıca alt paketlerini örneklerle birlikte öğreneceksiniz.

  • 🔬 Ne olduğunu: SciPy bir Python Matematik, fen bilimleri ve mühendislik bilişimi kütüphanesi.
  • 🧱 NumPy üzerine kurulu: SciPy, NumPy'ı gelişmiş bilimsel alt paketlerle genişletir.
  • 📐 Lineer Cebir: `scipy.linalg` determinantları, ters matrisleri ve özdeğerleri hesaplar.
  • 📈 Optimizasyon: `scipy.optimize` fonksiyonları minimize eder ve eğrileri uydurur.
  • 🖼️ Görüntü ve sinyaller: `scipy.ndimage` ve `scipy.fftpack` fonksiyonları görüntüleri ve Fourier dönüşümlerini işler.
  • 🤖 Yapay zekâ yardımı: Copilot gibi yapay zeka araçları, bilimsel görevler için SciPy kodu üretir.

SciPy'de Python

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, şekil değiştirme gibi en temel işlemleri gerçekleştiren yalnızca dizi veri türünü içerir.pingİndeksleme, vb.

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

Code 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: havza atlamaping() yerel optimize ediciyi birleştiren.

optimize.basinhopping(fonksiyon, 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, Geometrik dönüşümler (döndürme, kırpma, çevirme), görüntü filtreleme (keskinleştirme ve gürültü giderme), görüntü görüntüleme, görüntü segmentasyonu, sınıflandırma ve özellik çıkarma gibi işlevler sunar.tracyon.
  • Ç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.

SSS

SciPy açık kaynaklı bir yazılımdır. Python Bilimsel ve teknik hesaplamalar için bir kütüphane. NumPy üzerine kurulu olup, doğrusal cebir, optimizasyon, entegrasyon, sinyal işleme ve daha fazlası için alt paketler sunmaktadır.

NumPy temel dizi veri türünü ve temel işlemleri sağlarken, SciPy ise NumPy'nin üzerine optimizasyon, entegrasyon ve tam doğrusal cebir gibi gelişmiş bilimsel fonksiyonlar ekleyerek geliştirilmiştir.

SciPy'ı pip kullanarak `pip install scipy` komutuyla kurabilirsiniz; bu komut NumPy'ı da otomatik olarak yükler. Linux ve Mac'te ise bunun yerine sistem paket yöneticisini kullanabilirsiniz.

`scipy.linalg`, BLAS ve LAPACK üzerine kurulu doğrusal cebir rutinleri sağlar. İki boyutlu dizilerin determinantlarını, matris terslerini, özdeğerlerini ve özvektörlerini hızlı bir şekilde hesaplar.

`scipy.optimize`, fonksiyonları minimize etme, eğri uydurma ve kök bulma algoritmaları sağlar. BFGS ve basin-hop gibi yöntemleri içerir.pingve Nelder-Mead algoritması.

GitHub Copilot gibi yapay zeka asistanları, SciPy fonksiyon çağrılarını otomatik olarak tamamlar, bir görev için doğru alt paketi önerir ve optimizasyon, entegrasyon veya sinyal işleme için çalışan örnekler oluşturur.

Evet. Yapay zeka destekli araçlar, SciPy işlem hatlarının yazımını otomatikleştirebilir, uygun algoritmaları seçebilir ve yavaş sayısal döngüleri daha iyi performans için vektörleştirilmiş NumPy ve SciPy işlemlerine dönüştürebilir.

Evet. scipy.ndimage alt paketi, döndürme, çevirme gibi görüntü işlemlerini gerçekleştirir.ping, mahsulpingÇok boyutlu NumPy dizileri olarak görüntüler üzerinde çalışan filtreleme ve segmentasyon işlemleri.

Bu yazıyı şu şekilde özetleyin: