NumPy Arrays: Pengantar [Dengan Contoh]
Diterbitkan: 2022-12-08Ingin memulai dengan NumPy? Panduan ini akan mengajari Anda dasar-dasar array NumPy dengan Python.
Sebagai langkah pertama, Anda akan mempelajari cara kerja array NumPy secara berbeda dari daftar Python. Anda kemudian akan mempelajari beberapa cara untuk membuat array NumPy dan melakukan operasi dasar pada array tersebut.
Mari kita mulai!
Dasar-dasar NumPy Array
NumPy adalah salah satu pustaka Python paling populer untuk komputasi ilmiah dan analisis data. Struktur data dasar di NumPy adalah larik N-dimensi (larik ND). Mereka memiliki kemampuan penyiaran dan memungkinkan kami membuat vektor operasi untuk kecepatan dan menggunakan fungsi matematika bawaan untuk peningkatan kinerja.
Untuk mulai bekerja dengan NumPy, pertama-tama Anda harus menginstal pustaka dan mengimpornya ke lingkungan kerja Anda. Ini tersedia sebagai paket PyPI yang dapat diinstal melalui pip.
Untuk menginstal NumPy, buka terminal Anda dan jalankan perintah berikut:
pip3 install numpy
Setelah menginstal NumPy, Anda dapat mengimpornya ke lingkungan kerja Anda dengan alias. Alias yang biasa adalah np
.
import numpy as np
Catatan : Mengimpor NumPy di bawah alias
np
bukanlah persyaratan tetapi konvensi yang disarankan.
Daftar Python vs. Array NumPy
Pertimbangkan daftar angka Python berikut:
py_list = [1,2,3,4]
Anda bisa mendapatkan array NumPy dari daftar yang ada dengan memanggil fungsi np.array()
dengan daftar sebagai argumennya.
np_arr1 = np.array(py_list) print(np_arr1) [1 2 3 4]
Untuk memeriksa jenis np_arr1
, Anda memanggil fungsi type()
bawaan, Anda akan melihat bahwa itu adalah ndarray
, struktur data dasar di NumPy.
type(np_arr1) # numpy.ndarray
Meskipun daftar Python dan larik NumPy mungkin terlihat mirip, ada perbedaan tertentu:
- Daftar Python dapat menampung objek dari tipe data yang berbeda , sedangkan larik NumPy berisi elemen dari tipe data yang sama . Tipe data default adalah float dengan presisi 64 bit (float64).
- Elemen daftar Python tidak harus disimpan di lokasi yang berdekatan di memori. Namun, elemen array NumPy disimpan dalam blok yang berdekatan di memori. Akibatnya, lebih cepat untuk mencari dan mengakses elemen.
Mari kita bahas beberapa perbedaan lainnya.
Penyiaran
Fitur kuat dari array NumPy sedang disiarkan. Misalkan kita ingin menambahkan 2 ke semua elemen np_arr1
dan py_list
.
Mari coba tambahkan 2 ke py_list
dan lihat apa yang terjadi:
>>> py_list + 2
Kami melihat bahwa kami mendapatkan TypeError yang menyatakan bahwa kami hanya dapat menggabungkan dua daftar, dan menambahkan py_list + 2 seperti ini tidak didukung.
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-c0f9974899df> in <module> ----> 1 py_list + 2 TypeError: can only concatenate list (not "int") to list
Mari kita coba operasi yang sama pada array, np_arr1
.
>>> np_arr1 + 2
Hasilnya, kita melihat bahwa 2 telah ditambahkan ke setiap elemen array.
array([3, 4, 5, 6])
Ini karena NumPy secara implisit menyiarkan skalar 2 ke larik bentuk yang kompatibel untuk menghasilkan hasil ini.
Vektorisasi
Array NumPy mendukung vektorisasi untuk operasi berdasarkan elemen yang lebih cepat. Misalkan kita ingin menemukan jumlah elemen-bijaksana dari dua array.
Menggunakan operasi +
sederhana pada daftar akan mengembalikan gabungan dari dua daftar (yang bukan itu yang kita inginkan!).
>>> py_list + py_list # [1, 2, 3, 4, 1, 2, 3, 4]
Tetapi operasi yang sama pada array NumPy, np_arr1
, mengembalikan jumlah elemen np_arr1
dengan dirinya sendiri.
>>> np_arr1 + np_arr1 # array([2, 4, 6, 8])
Demikian pula, daftar bersarang mungkin terlihat mirip strukturnya dengan larik NumPy N-dimensi. Namun, perbedaan yang dibahas sejauh ini bertahan.
nested_list = [[1,2],[3,4],[5,6]] np_arr2 = np.array(nested_list) print(np_arr2)
[[1 2] [3 4] [5 6]]
Cara Membuat Array NumPy
Anda selalu dapat membuat array NumPy dari daftar Python yang ada menggunakan np.array(list-obj)
. Namun, ini bukan cara yang paling efisien.
Sebagai gantinya, Anda dapat menggunakan beberapa fungsi bawaan yang memungkinkan Anda membuat larik dengan bentuk tertentu. Bentuk array adalah sebuah tupel yang menunjukkan ukuran array sepanjang setiap dimensi. Misalnya, bentuk array 2x2 dengan dua baris dan dua kolom adalah (2,2). Di bagian ini, kita akan mempelajari cara menggunakan beberapa fungsi bawaan ini.
Membuat Array Nol dan Satuan
Sering kali bermanfaat untuk membuat larik dimensi tertentu yang diisi dengan semua nol atau semua satu. Dan kemudian menggunakannya dan memodifikasinya di langkah selanjutnya dalam program.
Kita dapat menggunakan fungsi zeros()
untuk membuat array nol. Berikan bentuk array yang diperlukan sebagai tuple: np.zeros(shape)
.
array0 = np.zeros((3,3)) print(array0)
Inilah hasilnya, array 2D nol:
[[0. 0. 0.] [0. 0. 0.] [0. 0. 0.]]
Anda dapat mengakses atribut array NumPy, memanggil atribut seperti dtype
dan shape
, menggunakan notasi titik, seperti yang ditunjukkan di bawah ini:
print(array0.dtype) # float64 print(array0.shape) # (3, 3)
Untuk mendapatkan lariknya, Anda bisa menggunakan fungsi np.ones()
.
array1 = np.ones((3,3)) print(array1)
[[1. 1. 1.] [1. 1. 1.] [1. 1. 1.]]
Membuat Matriks Identitas
Matriks identitas banyak digunakan dalam beberapa aplikasi dalam aljabar linier. Dan Anda dapat menggunakan fungsi np.eye()
untuk membuat matriks identitas. Fungsi np.eye()
hanya menerima satu argumen: urutan matriks ( n
).
arrayi = np.eye(3) print(arrayi)
[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]]
Membuat Array Bilangan Acak
Anda juga dapat membuat larik dengan bentuk tertentu yang diisi dengan angka acak yang diambil dari distribusi tertentu. Distribusi probabilitas yang umum digunakan adalah distribusi seragam dan distribusi normal standar.
Fungsi randn()
, yang merupakan bagian dari modul random
NumPy, dapat digunakan untuk menghasilkan larik angka yang diambil sampelnya dari distribusi normal standar . Distribusi normal standar adalah distribusi Gaussian dengan rata-rata nol dan varian satuan.
std_arr = np.random.randn(3,4) print(std_arr)
[[-0.13604072 1.21884359 2.06850932 0.78212093] [ 0.44314719 -0.78084801 -0.70517138 1.17984949] [ 1.13214829 1.02339351 0.15317809 1.83191128]]
np.random.rand()
mengembalikan array sampel angka dari distribusi seragam selama interval [0,1).
uniform_arr = np.random.rand(2,3) print(uniform_arr)
[[0.90470384 0.18877441 0.10021817] [0.741 0.10657658 0.71334643]]
Anda juga dapat membuat larik bilangan bulat acak menggunakan fungsi randint()
yang merupakan bagian dari modul acak NumPy. np.random.randint(low, high, size)
mengembalikan array bilangan bulat. Bentuk array disimpulkan dari argumen size
dan bilangan bulat mengambil nilai dalam interval [low,high)
.
Berikut contohnya:
int_arr = np.random.randint(1,100,(2,3)) print(int_arr)
[[53 89 33] [24 85 33]]
Fungsi Bawaan Lainnya yang Berguna
Selanjutnya, mari kita membahas beberapa fungsi bermanfaat lainnya untuk membuat array NumPy.
Fungsi arange()
mengembalikan larik angka antara nilai start
dan stop
dalam langkah dari nilai step
: start
, start + step
, start + 2*step
up to tetapi tidak termasuk stop
. Nilai start
dan step
adalah opsional . Ukuran langkah default adalah 1 dan nilai awal default adalah 0.
Dalam contoh ini, array_a
adalah larik angka mulai dari 1 hingga tetapi tidak termasuk 10 dalam langkah 0,5.
array_a = np.arange(1,10,0.5) print(array_a)
[1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5]
Anda juga dapat membuat larik angka dengan jarak yang sama menggunakan np.linspace()
. Gunakan np.linspace(start, stop, num)
untuk mendapatkan larik num
dengan jarak yang sama antara nilai start
dan stop
.
Di sini, arr_lin
adalah array dari 5 angka yang berjarak sama dalam interval [1,10].
array_lin = np.linspace(1,10,5) print(array_lin)
[ 1. 3.25 5.5 7.75 10. ]
Demikian pula, arr_lin2
adalah array dari 10 angka yang berjarak sama dalam interval [1,20].
array_lin2 = np.linspace(1,20,10) print(array_lin2)
[ 1. 3.11111111 5.22222222 7.33333333 9.44444444 11.55555556 13.66666667 15.77777778 17.88888889 20. ]
Berbeda dengan fungsi arange()
, fungsi linspace()
menyertakan titik akhir secara default.
Operasi Dasar pada Array NumPy
Selanjutnya, mari kita bahas beberapa operasi dasar pada array NumPy.
Menemukan Elemen Minimum dan Maksimum
Setiap kali kita menggunakan fungsi dari modul acak NumPy untuk membuat array, kita akan mendapatkan hasil yang berbeda setiap kali kode dijalankan. Untuk mendapatkan hasil yang dapat direproduksi, kita harus menetapkan seed: np.random.seed(seed_value)
.
Dalam contoh berikut, saya telah menetapkan benih untuk reproduksibilitas, int_arr1
adalah larik tujuh bilangan bulat acak dalam interval [1.100].
np.random.seed(27) int_arr1 = np.random.randint(1,100,7) print(int_arr1) # [20 57 73 32 57 38 25]
- Untuk menemukan elemen maksimum dalam array, Anda dapat memanggil metode
max()
pada objek array,int_arr1
, dan - Untuk menemukan elemen minimum dalam array, Anda dapat memanggil metode
min()
pada objek array,int_arr1
.
int_arr1.max() # 73 int_arr1.min() # 20
Menemukan Indeks Elemen Maksimum dan Minimum
Terkadang, Anda mungkin perlu menemukan indeks elemen maksimum dan minimum. Untuk melakukannya, Anda dapat memanggil metode argmax()
dan argmin()
pada objek array.
Di sini, elemen maksimum 73 terjadi pada indeks 2.
int_arr1.argmax() # 2
Dan elemen minimum 20 terjadi pada indeks 0.
int_arr1.argmin() # 0
Anda juga dapat menggunakan
np.argmax(array)
dannp.argmin(array)
untuk menemukan indeks elemen maksimum dan minimum. Pelajari lebih lanjut tentang fungsi NumPyargmax()
.
Cara Menggabungkan Array NumPy
Operasi umum lainnya yang mungkin ingin Anda lakukan dengan array NumPy adalah penggabungan.
Penggabungan Vertikal Menggunakan vstack
Anda dapat menggabungkan array secara vertikal menggunakan fungsi vstack()
.
Ini sebuah contoh. arr1
adalah larik satu dengan dua baris dan tiga kolom dan arr2
adalah larik nol dua baris dan tiga kolom.
arr1 = np.ones((2,3)) arr2 = np.zeros((2,3))
Kita dapat menggabungkan kedua array ini secara vertikal menggunakan fungsi vstack()
seperti yang ditunjukkan:
np.vstack((arr1,arr2))
array([[1., 1., 1.], [1., 1., 1.], [0., 0., 0.], [0., 0., 0.]])
Karena penumpukan terjadi secara vertikal, kedua larik harus memiliki jumlah kolom yang sama .
Mari ubah arr2
menjadi berbentuk (2,2). Sekarang memiliki dua baris dan dua kolom.
arr1 = np.ones((2,3)) arr2 = np.zeros((2,2)) np.vstack((arr1,arr2))
Oleh karena itu, penggabungan vertikal tidak dimungkinkan, dan kami mendapatkan ValueError.
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-21-d5d3bf37fc21> in <module> ----> 1 np.vstack((arr1,arr2)) ValueError: all the input array dimensions for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 3 and the array at index 1 has size 2
Penggabungan Horizontal Menggunakan hstack
Anda dapat menggabungkan array NumPy secara horizontal menggunakan fungsi hstack()
, seperti yang ditunjukkan di bawah ini.
arr1 = np.ones((3,3)) arr2 = np.zeros((3,2))
np.hstack((arr1,arr2))
Karena penumpukan terjadi secara horizontal, array input harus memiliki jumlah baris yang sama . Di sini, arr1
dan arr2
memiliki tiga baris.
array([[1., 1., 1., 0., 0.], [1., 1., 1., 0., 0.], [1., 1., 1., 0., 0.]])
Menggunakan gabungan
Anda juga dapat menggunakan array NumPy gabungan di sepanjang sumbu tertentu menggunakan fungsi concatenate()
. Setel argumen axis
opsional ke sumbu yang ingin Anda gabungkan; nilai default sumbu adalah nol.
Berikut beberapa contohnya:
arr1 = np.ones((2,3)) arr2 = np.zeros((2,3))
Ketika kita tidak menentukan sumbu untuk digabungkan, array digabungkan sepanjang sumbu 0. Dalam array yang dihasilkan, array kedua arr2
ditambahkan (sebagai baris) di bawah array pertama.
np.concatenate((arr1,arr2))
array([[1., 1., 1.], [1., 1., 1.], [0., 0., 0.], [0., 0., 0.]])
Saat kami menentukan axis = 1
, kami mendapatkan hasil berikut. arr2
digabungkan (sebagai kolom) di samping larik pertama, arr1
.
np.concatenate((arr1,arr2),axis=1)
array([[1., 1., 1., 0., 0., 0.], [1., 1., 1., 0., 0., 0.]])
Seperti halnya fungsi hstack()
dan vstack()
, dimensi array di sepanjang sumbu gabungan harus sesuai .
Kesimpulan
Dalam tutorial ini, Anda telah mempelajari perbedaan antara larik NumPy dan daftar Python, dengan fokus pada keunggulan larik N-dimensi dalam hal kecepatan dan efisiensi.
Anda juga telah mempelajari beberapa fungsi berguna untuk membuat larik dengan dimensi tertentu dan melakukan operasi umum, seperti menemukan elemen minimum dan maksimum, menggabungkan larik, dan banyak lagi.
Selanjutnya, pelajari cara membentuk ulang array NumPy.