NumPy dengan Python. Bagian 4

Kata Pengantar Penerjemah


Halo semuanya, kita sampai pada bagian terakhir. Selamat membaca!
Navigasi:


Polinomial matematika


NumPy menyediakan metode untuk bekerja dengan polinomial. Dengan melewati daftar akar, Anda bisa mendapatkan koefisien persamaan:

>>> np.poly([-1, 1, 1, 10]) array([ 1, -11, 9, 11, -10]) 

Di sini, array mengembalikan koefisien yang sesuai dengan persamaan: x411x3+9x2+11x10.
Operasi sebaliknya juga dapat dilakukan: melewati daftar koefisien, fungsi akar akan mengembalikan semua akar polinomial:

 >>> np.roots([1, 4, -2, 3]) array([-4.57974010+0.j , 0.28987005+0.75566815j, 0.28987005-0.75566815j]) 

Perhatikan bahwa dalam persamaan ini x3+4x22x+3dua akar imajiner.
Koefisien polinom dapat diintegrasikan. Mari pertimbangkan integrasi x3+x2+x+1masuk x4/4+x3/3+x2/2+x+C. Biasanya konstanta C adalah nol:

 >>> np.polyint([1, 1, 1, 1]) array([ 0.25 , 0.33333333, 0.5 , 1. , 0. ]) 

Demikian pula, derivatif dapat diambil:

 >>> np.polyder([1./4., 1./3., 1./2., 1., 0.]) array([ 1., 1., 1., 1.]) 

Fungsi polyadd, polysub, polymul, dan polydiv juga mendukung penjumlahan, pengurangan, perkalian, dan pembagian koefisien polinomial, masing-masing.
Fungsi polyval menggantikan nilai yang diberikan ke polinomial. Pertimbangkan polinomial x32x2+2di x = 4:

 >>> np.polyval([1, -2, 0, 2], 4) 34 

Kesimpulannya, fungsi polyfit dapat digunakan untuk memilih (menginterpolasi) polinomial dari urutan tertentu ke sekumpulan nilai:

 >>> x = [1, 2, 3, 4, 5, 6, 7, 8] >>> y = [0, 2, 1, 3, 7, 10, 11, 19] >>> np.polyfit(x, y, 2) array([ 0.375 , -0.88690476, 1.05357143]) 

Array yang dikembalikan adalah daftar koefisien polinomial. Fungsi interpolasi yang lebih canggih dapat ditemukan di SciPy.

Statistik


Selain fungsi rata-rata, var, dan std, NumPy menyediakan beberapa metode lagi untuk bekerja dengan statistik dalam array.
Median dapat ditemukan seperti ini:

 >>> a = np.array([1, 4, 3, 8, 9, 2, 3], float) >>> np.median(a) 3.0 

Koefisien korelasi untuk beberapa variabel diamati beberapa kali dan dapat ditemukan dari array bentuk: [[x1, x2, ...], [y1, y2, ...], [z1, z2, ...], .. .], di mana x, y, z berbeda yang dapat diamati dan angka menunjukkan jumlah "pengamatan":

 >>> a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float) >>> c = np.corrcoef(a) >>> c array([[ 1. , 0.72870505], [ 0.72870505, 1. ]]) 

Kami memiliki array yang dikembalikan c [i, j] yang menyimpan koefisien korelasi untuk ke-1 dan ke-j yang dapat diamati.
Demikian pula, momen kovarians dapat ditemukan:

 >>> np.cov(a) array([[ 0.91666667, 2.08333333], [ 2.08333333, 8.91666667]]) 

Angka acak


Bagian penting dari setiap simulasi adalah kemampuan untuk menghasilkan angka acak. Untuk melakukan ini, kami menggunakan generator nomor pseudo-acak bawaan di NumPy dalam sub-modul acak. Bilangan adalah pseudo acak, dalam arti bahwa mereka secara deterministik dihasilkan dari nomor benih, tetapi secara acak tersebar dalam kesamaan statistik. Untuk menghasilkan NumPy menggunakan algoritma khusus yang disebut Mersenne Twister.
Anda dapat menentukan elemen pembangkit dari urutan angka acak sebagai berikut:

 >>> np.random.seed(293423) 

Seed adalah bilangan bulat. Setiap program yang dimulai dengan seed yang sama akan menghasilkan urutan angka yang sama setiap kali. Ini mungkin berguna untuk debugging, tetapi secara umum kami tidak perlu mengatur seed, pada kenyataannya, ketika kami menjalankan program beberapa kali, kami ingin mendapatkan urutan angka yang berbeda setiap kali. Jika perintah ini tidak dijalankan, NumPy secara otomatis memilih seed acak (berdasarkan waktu), yang berbeda setiap kali program dimulai.
Array angka acak dari setengah interval [0,0, 1.0) dapat dihasilkan sebagai berikut:

 >>> np.random.rand(5) array([ 0.40783762, 0.7550402 , 0.00919317, 0.01713451, 0.95299583]) 

Fungsi rand dapat digunakan untuk menghasilkan array dua dimensi, atau fungsi membentuk kembali dapat digunakan:

 >>> np.random.rand(2,3) array([[ 0.50431753, 0.48272463, 0.45811345], [ 0.18209476, 0.48631022, 0.49590404]]) >>> np.random.rand(6).reshape((2,3)) array([[ 0.72915152, 0.59423848, 0.25644881], [ 0.75965311, 0.52151819, 0.60084796]]) 

Untuk menghasilkan angka acak tunggal pada interval [0,0, 1.0):

 >>> np.random.random() 0.70110427435769551 

Untuk menghasilkan bilangan bulat acak dalam rentang [min, maks), gunakan fungsi randint (min, maks):

 >>> np.random.randint(5, 10) 9 

Dalam setiap contoh kami, kami menghasilkan angka dari distribusi seragam yang berkelanjutan. NumPy juga termasuk generator untuk distribusi lain, seperti: Beta, binomial, chi-square, Dirichlet, eksponensial, Fischer, Gamma, geometris, Gambal, hypergeometrik, Laplace, logistik, lognormal, logaritmik, multinomial, multidimensi normal, binomial negatif, noncentral chi-square, off-center Fischer, normal (Gauss), Pareto, Poisson, power, Rayleigh, Cauchy, mahasiswa, segitiga, Von Mies, Wald, Weibull dan Zipf. Mari kita lihat dua contoh.
Untuk menghasilkan dari distribusi Poisson diskrit di λ = 6.0,

 >>> np.random.poisson(6.0) 5 

Untuk menghasilkan angka dari distribusi normal (Gaussian) dengan nilai rata-rata μ = 1,5 dan standar deviasi σ = 4.0:

 >>> np.random.normal(1.5, 4.0) 0.83636555041094318 

Untuk mendapatkan angka dari distribusi normal (μ = 0, σ = 1), tanpa menentukan argumen:

 >>> np.random.normal() 0.27548716940682932 

Untuk menghasilkan beberapa nilai, gunakan argumen ukuran:

 >>> np.random.normal(size=5) array([-1.67215088, 0.65813053, -0.70150614, 0.91452499, 0.71440557]) 

Modul untuk menghasilkan angka acak juga dapat digunakan untuk mendistribusikan nilai secara acak dalam daftar. Ini bisa bermanfaat jika kita ingin mendistribusikan nilai secara acak dalam daftar:

 >>> l = range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> np.random.shuffle(l) >>> l [4, 9, 5, 0, 2, 7, 6, 8, 1, 3] 

Perhatikan bahwa fungsi acak mengubah array yang ada dan tidak mengembalikan yang baru.

Beberapa informasi tambahan


NumPy mencakup lebih banyak fitur yang belum kami sebutkan di sini. Secara khusus, ini adalah fungsi untuk bekerja dengan transformasi Fourier diskrit, operasi yang lebih kompleks dalam aljabar linier, menguji array untuk ukuran / dimensi / tipe, membelah dan menghubungkan array, histogram, membuat array dari data apa pun dengan cara yang berbeda, membuat dan mengoperasikan array grid , dengan nilai khusus (NaN, Inf), operasi-set, pembuatan berbagai jenis matriks khusus dan perhitungan fungsi matematika khusus (Misalnya: fungsi Bessel). Anda juga dapat melihat dokumentasi NumPy untuk detail yang lebih tepat.

Modul SciPy


SciPy memperluas fungsionalitas NumPy dengan sangat baik. Kami tidak akan membicarakan detailnya, tetapi mempertimbangkan beberapa kemungkinannya. Sebagian besar fungsi SciPy tersedia setelah mengimpor modul:

 >>> import scipy 

Fungsi bantuan memberikan informasi berguna tentang SciPy:

>>> help(scipy)
Help on package scipy:

NAME
scipy
FILE
c:\python25\lib\site-packages\scipy\__init__.py
DESCRIPTION
SciPy --- A scientific computing package for Python
===================================================
Documentation is available in the docstrings and
online at http://docs.scipy.org.

Contents
--------
SciPy imports all the functions from the NumPy namespace, and in
addition provides:

Available subpackages
---------------------
odr --- Orthogonal Distance Regression [*]
misc --- Various utilities that don't have
another home.sparse.linalg.eigen.arpack --- Eigenvalue solver using iterative methods. [*]
fftpack --- Discrete Fourier Transform algorithms[*]
io --- Data input and output [*]
sparse.linalg.eigen.lobpcg --- Locally Optimal Block Preconditioned Conjugate Gradient Method (LOBPCG) [*]
special --- Airy Functions [*]
lib.blas --- Wrappers to BLAS library [*]
sparse.linalg.eigen --- Sparse Eigenvalue Solvers [*]
stats --- Statistical Functions [*]
lib --- Python wrappers to external libraries [*]
lib.lapack --- Wrappers to LAPACK library [*]
maxentropy --- Routines for fitting maximum entropymodels [*]
integrate --- Integration routines [*]
ndimage --- n-dimensional image package [*]
linalg --- Linear algebra routines [*]
spatial --- Spatial data structures and algorithms[*]
interpolate --- Interpolation Tools [*]
sparse.linalg --- Sparse Linear Algebra [*]
sparse.linalg.dsolve.umfpack --- :Interface to the UMFPACK library: [*]
sparse.linalg.dsolve --- Linear Solvers [*]
optimize --- Optimization Tools [*]
cluster --- Vector Quantization / Kmeans [*]
signal --- Signal Processing Tools [*]
sparse --- Sparse Matrices [*]
[*] - using a package requires explicit import (see pkgload)
...

Perhatikan bahwa beberapa sub-modul secara langsung memerlukan impor tambahan, yang ditandai dengan tanda bintang:

 >>> import scipy >>> import scipy.interpolate 

Fungsi-fungsi dalam setiap modul didokumentasikan dengan baik dalam dokumen internal dan dalam dokumentasi resmi. Sebagian besar dari mereka secara langsung menyediakan fungsi untuk bekerja dengan algoritma numerik dan sangat mudah digunakan. Dengan demikian, SciPy dapat menghemat banyak waktu dalam perhitungan ilmiah, karena Ini menyediakan fungsi yang sudah ditulis dan diuji.
Kami tidak akan mempertimbangkan SciPy secara detail, tetapi tabel di bawah ini akan mencakup beberapa fitur-fiturnya:
ModulUntuk apa digunakan
scipy.constantsSet konstanta matematika dan fisik
scipy.specialBanyak fungsi khusus untuk fisika matematika, seperti: Airy, elips, Bessel, gamma, beta, hypergeometric, silinder parabola, Mathieu, gelombang bola, Struve, Kelvin.
scipy.integrateFungsi untuk bekerja dengan integrasi numerik menggunakan metode trapesium, Simpson, Romberg dan lainnya. Juga menyediakan metode untuk bekerja dengan persamaan diferensial lengkap.
scipy.optimizeMetode standar tinggi / rendah untuk bekerja dengan fungsi pengguna umum. Algoritma termasuk: Nelder - Mead, Pull ( Powell's ), gradien konjugat, Bruden - Fletcher - Goldfarb - Channo, kuadrat terkecil, optimasi bersyarat, simulasi anil, pencarian penuh, Brent, Newton, pembagian dua bagian, Broyden, Anderson, dan pencarian linier.
scipy.linalgFungsionalitas yang lebih luas untuk bekerja dengan aljabar linier daripada di NumPy. Memberikan lebih banyak opsi untuk menggunakan fungsi khusus dan cepat untuk objek tertentu (Misalnya: matriks tiga diagonal). Metode yang disertakan: mencari matriks non-degenerasi, mencari determinan, solusi sistem linear persamaan, perhitungan norma dan matriks pseudoinverse, dekomposisi spektral, dekomposisi singular, dekomposisi LU, dekomposisi LU, dekomposisi QR, dekomposisi QR, dekomposisi Schur, dan banyak operasi matematika lainnya untuk bekerja dengan matriks.
scipy.sparseFungsi untuk bekerja dengan matriks jarang yang besar
Scipy.interpolateMetode dan kelas untuk menginterpolasi objek yang dapat digunakan untuk data numerik diskrit. Linear dan spline ( Note translator: representasi matematis dari kurva halus ) interpolasi tersedia untuk set data satu dan dua dimensi.
scipy.fftpackMetode untuk memproses transformasi Fourier.
scipy.signalMetode untuk memproses sinyal, misalnya: konvolusi fungsi, korelasi, transformasi Fourier diskrit, pemulusan B-spline, pemfilteran, dll., Dll.
scipy.statsPerpustakaan besar fungsi statistik dan distribusi untuk bekerja dengan set data.
Sekelompok besar pengembang terus mengembangkan fitur SciPy baru. Pendekatan praktis yang baik adalah ini: jika Anda berpikir untuk mengimplementasikan fungsi numerik dan metode apa pun dalam kode Anda, pertama-tama Anda dapat melihat dokumentasi SciPy asli. Ada kemungkinan seseorang telah menerapkan dan berkontribusi pada SciPy.

Kata penutup


Seri artikel kami telah berakhir. Terima kasih kepada semua orang yang membaca dan meluangkan waktu. Saya juga berharap bahwa Anda telah mengeluarkan beberapa informasi yang berguna dan mempelajari sesuatu yang baru. Terus kembangkan dan pelajari hal-hal baru! Sampai ketemu lagi.

Source: https://habr.com/ru/post/id415373/


All Articles