Tutorial SciPy: Apa itu Python SciPy dan Bagaimana menggunakannya?



SciPy adalah perpustakaan Python yang digunakan untuk menyelesaikan masalah saintifik dan matematik. NumPy vs SciPy. Asas, Khas, Integrasi, Pengoptimuman, dan lain-lain dengan contoh.

Matematik menangani sebilangan besar konsep yang sangat penting tetapi pada masa yang sama, kompleks dan memakan masa. Walau bagaimanapun, menyediakan perpustakaan SciPy lengkap yang menyelesaikan masalah ini untuk kami. Dalam tutorial SciPy ini, anda akan belajar bagaimana memanfaatkan perpustakaan ini bersama dengan beberapa fungsi dan contohnya.

Sebelum meneruskan, perhatikan semua topik yang dibincangkan dalam artikel ini:





Jadi mari kita mulakan. :)

Apa itu SciPy?

SciPy adalah perpustakaan Python sumber terbuka yang digunakan untuk menyelesaikan masalah saintifik dan matematik. Ia dibina di atas lanjutan dan membolehkan pengguna memanipulasi dan memvisualisasikan data dengan pelbagai arahan peringkat tinggi. Seperti yang telah disebutkan sebelumnya, SciPy menggunakan NumPy dan oleh itu jika anda mengimport SciPy, tidak perlu mengimport NumPy.



NumPy vs SciPy

Kedua-dua NumPy dan SciPy adalah digunakan untuk analisis matematik dan numerik terpakai. NumPy mengandungi data array dan operasi asas seperti menyusun, mengindeks, dan lain-lain sedangkan, SciPy terdiri daripada semua kod berangka. Walaupun NumPy menyediakan sejumlah yang dapat membantu menyelesaikan aljabar linear, transformasi Fourier, dan lain-lain, SciPy adalah perpustakaan yang sebenarnya mengandungi versi lengkap fungsi ini bersama dengan banyak lagi. Walau bagaimanapun, jika anda melakukan analisis saintifik menggunakan Python, anda perlu memasang NumPy dan SciPy sejak SciPy menggunakan NumPy.

Subpakej dalam SciPy:

SciPy mempunyai sejumlah bungkusan untuk pelbagai pengiraan saintifik yang ditunjukkan dalam jadual berikut:

NamaPenerangan
gugusanAlgoritma pengelompokan
pemalarPemalar fizikal dan matematik
fftpackRutin Transformasi Fourier Cepat
menyatukanPenyatuan dan penyelesai pembezaan biasa
interpolateInterpolasi dan melicinkan splines
SayaInput dan Keluaran
linalgAljabar linear
saya terbangPemprosesan gambar N-dimensi
odrRegresi jarak ortogonal
mengoptimumkanRutin pengoptimuman dan pencarian akar
isyaratPemprosesan isyarat
jarangMatriks jarang dan rutin yang berkaitan
ruangStruktur dan algoritma data spatial
khasFungsi khas
statistikTaburan dan fungsi statistik

Namun, untuk keterangan terperinci, anda boleh mengikuti dokumentasi rasmi .



Pakej ini perlu diimport secara eksklusif sebelum menggunakannya. Sebagai contoh:

tetapkan windows classpath java 10
dari kluster import scipy

Sebelum melihat setiap fungsi ini secara terperinci, pertama-tama mari kita lihat fungsi yang biasa berlaku di NumPy dan SciPy.

Fungsi Asas:

Interaksi dengan NumPy:

SciPy menggunakan NumPy dan oleh itu anda boleh menggunakan fungsi NumPy itu sendiri untuk menangani tatasusunan. Untuk mengetahui secara mendalam mengenai fungsi-fungsi ini, anda hanya dapat menggunakan fungsi bantuan (), info () atau sumber ().

pertolongan ():

Untuk mendapatkan maklumat mengenai fungsi apa pun, anda dapat menggunakan pertolongan () fungsi. Terdapat dua cara fungsi ini dapat digunakan:

  • tanpa sebarang parameter
  • menggunakan parameter

Berikut adalah contoh yang menunjukkan kedua-dua kaedah di atas:

dari scusty import cluster help (cluster) #dengan parameter help () #tanpa parameter

Apabila anda melaksanakan kod di atas, pertolongan pertama () mengembalikan maklumat mengenai gugusan submodul. Bantuan kedua () meminta pengguna memasukkan nama mana-mana modul, kata kunci, dan lain-lain yang mana pengguna ingin mencari maklumat. Untuk menghentikan pelaksanaan fungsi ini, cukup ketik 'quit' dan tekan enter.

maklumat ():

Fungsi ini mengembalikan maklumat mengenai yang dikehendaki , modul, dll.

scipy.info (kelompok)

sumber ():

Kod sumber dikembalikan hanya untuk objek yang ditulis . Fungsi ini tidak mengembalikan maklumat berguna sekiranya kaedah atau objek ditulis dalam bahasa lain seperti C. Walau bagaimanapun, sekiranya anda ingin menggunakan fungsi ini, anda boleh melakukannya seperti berikut:

scipy.source (kelompok)

Fungsi Khas:

SciPy menyediakan sejumlah fungsi khas yang digunakan dalam fizik matematik seperti elips, fungsi kemudahan, gamma, beta, dll.Untuk mencari semua fungsi, anda dapat menggunakan fungsi help () seperti yang dijelaskan sebelumnya.

Fungsi Eksponen dan Trigonometri:

Pakej Fungsi Khas SciPy menyediakan sejumlah fungsi di mana anda dapat mencari eksponen dan menyelesaikan masalah trigonometri.

Pertimbangkan contoh berikut:

CONTOH:

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

PENGELUARAN:

1000.0
8.0
1.0
0.7071067811865475

Terdapat banyak fungsi lain yang terdapat dalam pakej fungsi khas SciPy yang boleh anda cuba sendiri.

Fungsi Integrasi:

SciPy menyediakan sejumlah fungsi untuk menyelesaikan integrasi. Mulai dari integrator pembezaan biasa hingga menggunakan peraturan trapezoid untuk mengira integral, SciPy adalah gudang fungsi untuk menyelesaikan semua jenis masalah integrasi.

Integrasi Umum:

SiPy menyediakan fungsi bernama quad untuk mengira kamiran fungsi yang mempunyai satu pemboleh ubah. Hadnya boleh ± & infin(± inf) untuk menunjukkan had yang tidak terhingga. Sintaks fungsi quad () adalah seperti berikut:

SINTAX:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, had = 50, poin = Tiada, berat = Tiada, wvar = Tiada, wopts = Tiada , maxp1 = 50, limlst = 50)

Di sini, fungsi akan disatukan antara had a dan b (boleh juga tidak terbatas).

CONTOH:

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

Dalam contoh di atas, fungsi 'a' dinilai antara had 0, 1. Apabila kod ini dijalankan, anda akan melihat output berikut.

PENGELUARAN:

(3.9086503371292665, 4.3394735994897923e-14)

Fungsi Integral Berganda:

SciPy menyediakan dblquad yang boleh digunakan untuk mengira integral berganda. Unggul berganda, seperti yang kita ketahui, terdiri daripada dua pemboleh ubah sebenar. Fungsi dblquad () akan mengambil fungsi untuk disatukan sebagai parameternya bersama dengan 4 pemboleh ubah lain yang menentukan batas dan fungsi dy dan dx.

CONTOH:

dari scipy import integrate a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

PENGELUARAN:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy menyediakan pelbagai fungsi lain untuk menilai integral tiga, n integral, Romberg Integrals, dan lain-lain yang boleh anda terokai dengan lebih terperinci. Untuk mengetahui semua butiran mengenai fungsi yang diperlukan, gunakan fungsi bantuan.

Fungsi Pengoptimuman:

Scipy.optimize menyediakan sebilangan algoritma pengoptimuman yang biasa digunakan yang dapat dilihat menggunakan fungsi bantuan.

Ia pada asasnya terdiri daripada yang berikut:

  • Pengurangan fungsi skalar multivariate yang tidak terkawal dan terkehadapan kurangkan (mis. BFGS, Newton Conjugate Gradient, Nelder_mead simplex, dll)
  • Rutin pengoptimuman global (mis. Diferensial_evolusi, dual_annealing, dll)
  • Minimalisasi kuadrat minimum dan pemasangan lengkung (mis. Minimum_square, curve_fit, dll)
  • Scalar univariate function minimizers and root finders (mis. Minimize_scalar dan root_scalar)
  • Penyelesai sistem persamaan multivariate menggunakan algoritma seperti hybrid Powell, Levenberg-Marquardt.

Fungsi Rosenbrook:

Fungsi Rosenbrook ( bunga ros ) adalah masalah ujian yang digunakan untuk algoritma pengoptimuman berdasarkan kecerunan. Ia ditakrifkan sebagai berikut dalam SciPy:

rosen-Scipy tutorial-edurekaCONTOH:

import numpy sebagai np dari scipy.optimumkan import rosen a = 1.2 * np.arange (5) rosen (a)

PENGELUARAN: 7371.0399999999945

Nelder-Mead:

TheNelderMetode –Mead adalah kaedah berangka yang sering digunakan untuk mencari min / max fungsi dalam ruang multidimensi. Dalam contoh berikut, kaedah meminimumkan digunakan bersama dengan algoritma Nelder-Mead.

CONTOH:

dari scipy import optimize a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

PENGELUARAN: tatasusunan ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])

Fungsi Interpolasi:

Dalam bidang analisis numerik, interpolasi merujuk kepada membina titik data baru dalam satu set titik data yang diketahui. Perpustakaan SciPy terdiri daripada subpakej bernama scipy.interpolate yang terdiri daripadafungsi dan kelas spline, kelas interpolasi satu dimensi dan pelbagai dimensi (univariate dan multivariate), dll.

Interpolasi Univariate:

Interpolasi univariat pada asasnya adalah bidang pemasangan kurva yangmencari lengkung yang memberikan padanan tepat pada rangkaian titik data dua dimensi. SciPy menyediakan interp1d fungsi yang boleh digunakan untuk menghasilkan interpolasi univariat.

CONTOH:

import matplotlib.pyplot sebagai plt dari scipy import 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) # gunakan fungsi interpolasi yang dikembalikan oleh `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

PENGELUARAN:

Interpolasi Multivariate:

Interpolasi multivariate(ruanginterpolasi) adalah sejenisinterpolasipada fungsi yang terdiri daripada lebih daripada satu pemboleh ubah. Contoh berikut menunjukkan contoh interp2d fungsi.
Interpolasi di atas grid 2-D menggunakan fungsi interp2d (x, y, z) pada dasarnya akan menggunakan susunan x, y, z untuk menghampiri beberapa fungsi f: “z = f (x, y)“ dan mengembalikan fungsi yang menggunakan kaedah panggilan interpolasi spline untuk mencari nilai mata baru.
CONTOH:

dari scipy import interpolate import matplotlib.pyplot sebagai 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 ()

PENGELUARAN:

Fungsi Transformasi Fourier:

Analisis Fourier adalah kaedah yang berkaitan dengan menyatakan fungsi sebagai jumlah komponen berkala dan mendapatkan semula isyarat dari komponen tersebut. The fft fungsi boleh digunakan untuk mengembalikanTransformasi Fourier diskrit dari urutan nyata atau kompleks.

CONTOH:

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

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

Begitu juga, anda boleh mencari kebalikannya dengan menggunakan ifft berfungsi seperti berikut:

CONTOH:

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

PENGELUARAN: [1.5 + 0.j -0.5-0.5j -0.5 + 0.j -0.5 + 0.5j]

Fungsi Pemprosesan Isyarat:

Pemprosesan isyarat berurusan denganmenganalisis, mengubah suai dan mensintesis isyarat seperti suara, gambar, dan lain-lain. SciPy menyediakan beberapa fungsi menggunakan yang anda boleh reka, tapiskan dan campurkan data satu dimensi dan dua dimensi.

Penapisan:

Dengan menyaring isyarat, anda pada dasarnya mengeluarkan komponen yang tidak diingini daripadanya. Untuk melakukan penyaringan yang diperintahkan, anda boleh menggunakan pesanan_filter fungsi. Fungsi ini pada asasnya melakukan penyaringan teratur pada array. Sintaks fungsi ini adalah seperti berikut:

SINTAX:
order_filter (a, domain, pangkat)

menggabungkan kod sumber c ++

a = Susunan input N-dimensi

domain = array topeng yang mempunyai bilangan dimensi yang sama dengan `a`

rank = Nombor bukan negatif yang memilih elemen dari senarai setelah disusun (0 adalah terkecil diikuti oleh 1…)

CONTOH:

dari isyarat import scipy x = np.arange (35). bentuk semula (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))

PENGELUARAN:

[[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.]
[lima belas. 16. 17. 18. 13.]
[dua puluh. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Bentuk gelombang:

Subpackage scipy.signal juga terdiri daripada pelbagai fungsi yang dapat digunakan untuk menghasilkan bentuk gelombang. Salah satu fungsi tersebut adalah kicauan . Fungsi ini adalah fpenjana kosinus dan sintaksinya adalah seperti berikut:

SINTAX:
kicau (t, f0, t1, f1, kaedah = 'linear', phi = 0, vertex_zero = True)

di mana,

CONTOH:

dari kicauan import scipy.signal, spektrogram import matplotlib.pyplot sebagai plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, kaedah = 'linear') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('time in sec)') plt.show ()

PENGELUARAN:

Aljabar Linear:

Aljabar linier menangani persamaan linear dan perwakilannya menggunakan ruang vektor dan matriks. SciPy dibina berdasarkanPerpustakaan ATLAS LAPACK dan BLAS dan adalahsangat pantas dalam menyelesaikan masalah yang berkaitan dengan algebra linear. Selain semua fungsi dari numpy.linalg, scipy.linalg juga menyediakan sejumlah fungsi lanjutan yang lain. Juga, jika numpy.linalg tidak digunakan bersamaSokongan ATLAS LAPACK dan BLAS, scipy.linalg lebih pantas daripada numpy.linalg.

Mencari Kebalikan Matriks:

Secara matematik, kebalikan dari matriks Aadalah matriksBseperti ituAB = Sayadi manaSayaadalah matriks identiti yang terdiri daripada satu diagonal utama yang dilambangkan sebagaiB = A-satu. Dalam SciPy, kebalikan ini dapat diperoleh dengan menggunakan linalg.inv kaedah.

CONTOH:

import numpy sebagai np dari scipy import linalg A = np.array ([[1,2,, [4,3]]) B = linalg.inv (A) cetak (B)

PENGELUARAN:

[[-0.6 0.4]
[0.8 -0.2]]

Mencari Penentu:

Nilai yang diperoleh secara aritmetik dari pekali matriks dikenali sebagai penentu matriks segiempat sama. Dalam SciPy, ini dapat dilakukan dengan menggunakan fungsi yang yang mempunyai sintaks berikut:

SINTAX:
det (a, overwrite_a = Palsu, check_finite = Betul)
di mana,

a: (M, M) Adalah matriks segiempat sama

overwrite_a (bool, pilihan): Benarkan penimpaan data dalam a

check_finite (bool, pilihan): Untuk memeriksa sama ada matriks input hanya terdiri daripada nombor terhingga

CONTOH:

import numpy sebagai np dari scipy import linalg A = np.array ([[1,2,, [4,3]]) B = linalg.det (A) cetak (B)

PENGELUARAN: -5.0

Nilai Eigen jarang:

Nilai eigen adalah sekumpulan skalar tertentu yang dihubungkan dengan persamaan linear. ARPACK menyediakan yang membolehkan anda mencari nilai eigen (eigenvectors) dengan cepat. Fungsi lengkap ARPACK dibungkus dalamdua antara muka peringkat tinggi iaitu scipy.sparse.linalg.eigs dan scipy.sparse.linalg.eigsh. eig. Antara muka eigs membolehkan anda mencari nilai eigen dari matriks persegi yang tidak simetri sebenar atau kompleks sedangkan antara muka eigsh mengandungi antara muka untuk matriks simetri atau kompleks-hermitia sebenar.

The eigh fungsi menyelesaikan masalah nilai eigen umum untuk matriks Hermitian atau simetri sebenar.

CONTOH:

dari scipy.linalg import eigh import numpy sebagai 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 ('Nilai eigen terpilih:', a) print ('Complex ndarray:', b)

PENGELUARAN:

Nilai eigen terpilih: [-2.53382695 1.66735639 3.69488657 12.17158399]
Kompleks ndarray: [[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]]

Struktur dan Algoritma Data Spatial:

Data spatial pada dasarnya terdiri dari objek yang terdiri dari garis, titik, permukaan, dan lain-lain. Pakej spasial SciPy dapat mengiraGambar rajah, segitiga, dll menggunakan pustaka Qhull. Ini juga terdiri dari implementasi KDTree untuk pertanyaan titik tetangga terdekat.

Segitiga Delaunay:

Secara matematik, triangulasi Delaunay untuk sekumpulan titik diskrit dalam satah adalah segitiga sehingga tidak ada titik dalam set titik yang diberikandi dalam bulatan segitiga apa pun.

CONTOH:

import matplotlib.pyplot sebagai plt dari scipy.spatial import Titik Delaunay = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (mata) #Delaunay objek cetak (a) print (a.simplices) plt.triplot (poin [:, 0], poin [:, 1], a.simplices) plt.plot (poin [:, 1], titik [:, 0], 'o') plt. Tunjukkan ()

PENGELUARAN:

Fungsi Pemprosesan Imej Multidimensi:

Pemprosesan gambar pada dasarnya berkaitan dengan melakukan operasi pada gambar untuk mendapatkan maklumat atau untuk mendapatkan gambar yang lebih baik dari yang asli. Pakej scipy.ndimage terdiri daripada sejumlahfungsi pemprosesan dan analisis imej yang dirancang untuk berfungsi dengan tatasusunan dimensi sewenang-wenangnya.

Konvolusi dan korelasi:

SciPy menyediakan sejumlah fungsi yang memungkinkan korelasi dan konvolusi gambar.

  • Fungsinya berkorelasi1d boleh digunakan untuk mengira korelasi satu dimensi di sepanjang paksi yang diberikan
  • Fungsinya berkorelasi membenarkan korelasi multidimensi bagi setiap array yang diberikan dengan kernel yang ditentukan
  • Fungsinya berpusing1d boleh digunakan untuk mengira konvolusi satu dimensi di sepanjang paksi tertentu
  • Fungsinya berpusing membolehkan konvolusi multidimensi bagi setiap array yang diberikan dengan kernel yang ditentukan

CONTOH:

import numpy sebagai np dari scipy.dimage import korelasi1d berkorelasi1d ([3,5,1,7,2,6,9,4], berat = [1,2])

PENGELUARAN: tatasusunan ([9, 13, 7, 15, 11, 14, 24, 17])

Fail IO:

Pakej scipy.io menyediakan sebilangan fungsi yang membantu anda menguruskan fail dengan pelbagai format seperti fail MATLAB, fail IDL, fail Matrix Market, dll.

Untuk menggunakan pakej ini, anda perlu mengimportnya seperti berikut:

import scipy.io sebagai sio

Untuk maklumat lengkap mengenai sub-paket, anda boleh merujuk pada dokumen rasmi di Fail IO .

Ini membawa kita ke akhir Tutorial SciPy ini. Saya harap anda telah memahami semuanya dengan jelas. Pastikan anda berlatih sebanyak mungkin .

Ada soalan untuk kami? Sila sebutkan di bahagian komen blog 'SciPy Tutorial' ini dan kami akan menghubungi anda secepat mungkin.

Untuk mendapatkan pengetahuan mendalam tentang Python bersama dengan pelbagai aplikasinya, anda boleh mendaftar secara langsung dengan sokongan 24/7 dan akses seumur hidup.