NumPy Arrays: Pengantar [Dengan Contoh]

Diterbitkan: 2022-12-08

Ingin 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.

Bagaimana-Membuat-NumPy-Array

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) dan np.argmin(array) untuk menemukan indeks elemen maksimum dan minimum. Pelajari lebih lanjut tentang fungsi NumPy argmax() .

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.