Python : Tutorial Operasi Aritmetika pada Numpy Array
Tutorial ini adalah lanjutan dari tutorial sebelumnya yaitu Membuat Objek Array Menggunakan Library Numpy. Pada bagian tersebut, sudah dibahas pembuatan objek numpy array baik berupa array 1-dimensi (vektor) maupun 2-dimensi (Matriks). Cara yang sama juga berlaku untuk dimensi yang lebih tinggi (n-dimensi).
Pada bagian ini kita akan membahas operator dan fungsi untuk operasi aritmetika pada numpy khususnya untuk array vektor dan matriks. Operasi yang dimaksud mencakup operasi dasar seperti penjumlahan dan pengurangan, perkalian matriks, transpose matriks hingga invers matriks. Selain itu akan dibahas beberapa fungsi untuk menghitung ringkasan statistik dari data.
Baca juga: Operasi Matriks dengan Numpy
Penjumlahan dan Pengurangan
Operasi penjumlahan dan pengurangan pada numpy dilakukan menggunakan operator “+
” dan “-
“. Penjumlahan dan pengurangan dapat dilakukan antara dua array berdimensi sama, array 1-dimensi dengan array n-dimensi ataupun antara skalar dan array. Masing-masing proses memiliki cara kerja yang berbeda.
Jika kedua array memiliki dimensi yang sama, maka penjumlahan dilakukan untuk setiap elemen dengan posisi yang sama. Berikut contohnya:
Python
np.random.seed(100) arr_1 = np.random.randint(1, 10, (2, 3)) arr_2 = np.random.randint(1, 10, (2, 3)) arr_3 = arr_1 + arr_2 print(arr_1, arr_2, arr_3, sep="\n")
Output
# Output [[9 9 4] [8 8 1]] [[5 3 6] [3 3 3]] [[14 12 10] [11 11 4]]
Pada contoh tersebut arr_3
adalah penjumlahan arr_1
dan arr_2
dengan dimensi yang sama. Elemen pada arr_3
adalah hasil penjumlahan dari elemen arr_1
dan arr_2
pada posisi yang sama. Misalkan untuk elemen ke-(1, 1) yaitu 9 + 4 = 14
, elemen ke-(2, 3) yaitu 1 + 3 = 4
. Aturan yang sama juga berlaku untuk operasi pengurangan.
Operasi penjumlahan dan pengurangan dapat dilakukan pada 2 array dimana salah satunya adalah array 1-Dimensi (vektor). Namun jumlah elemen pada vektor tersebut harus sama dengan ukuran salah satu dimensi pada array lainnya. Contohnya penjumlahan array 3 x 1 dengan array 3 x 4.
Python
np.random.seed(100) arr_4 = np.random.randint(1, 10, (3, 4)) arr_5 = np.random.randint(1, 10, (3, 1)) arr_6 = arr_4 + arr_5 print(arr_4, arr_5, arr_6, sep="\n")
Output
# Output [[9 9 4 8] [8 1 5 3] [6 3 3 3]] [[2] [1] [9]] [[11 11 6 10] [ 9 2 6 4] [15 12 12 12]]
Untuk memperoleh arr_6
maka setiap elemen pada baris pertama dari arr_4
yaitu [9 9 4 8]
akan ditambahkan dengan elemen pertama pada arr_5
yaitu [2]
sehingga menghasilkan [11 11 6 10]
. Begitu pula untuk baris baris ke-2 dan ke-3.
Contoh lainnya:
Python
np.random.seed(100) arr_7 = np.random.randint(1, 10, (1, 3)) arr_8 = np.random.randint(1, 10, (2, 3)) arr_9 = arr_7 - arr_8 print(arr_7, arr_8, arr_9, sep="\n)
Output
# Output [[9 9 4]] [[8 8 1] [5 3 6]] [[ 1 1 3] [ 4 6 -2]]
Pada contoh kali ini, kedua array memiliki dimensi kolom yang sama yaitu 3. Untuk menghitung nilai elemen arr_9
misalkan untuk kolom pertama adalah [(9-8) (9-5)]
dan menghasilkan nilai [1 4]
. Begitu pula untuk kolom kedua [1 6]
dan ketiga [3 -2]
.
Terakhir, operasi ini juga dapat dilakukan antara skalar dan numpy array. Output yang dihasilkan adalah penjumlahan atau pengurangan nilai skalar tersebut dengan setiap elemen array.
Python
np.random.seed(100) arr_10 = np.random.randint(1, 10, (2, 3)) arr_11 = 12 + arr_10 print(arr_10, arr_11, sep="\n")
Output
# Output [[9 9 4] [8 8 1]] [[21 21 16] [20 20 13]]
Perkalian (Dot Product) dan Pembagian
Perkalian dan pembagian pada numpy array prinsipnya sama dengan pertambahan dan pengurangan. Operator perkalian menggunakan “*
” dan pembagian menggunakan “/
“. Perlu ditekankan, perkalian yang dimaksud di sini adalah dot product atau elemen-wise dimana perkalian dilakukan antar elemen pada posisi yang sama. Seperti pada penjumlahan, operasi perkalian dan pembagian juga dapat dilakukan pada kondisi yang beragam.
Sebagai contoh kita akan menggunakan arr_1
dan arr_2
yang telah dibuat sebelumnya:
Python
arr_12 = arr_1 * arr_2 print(arr_1, arr_2, arr_12, sep="\n")
Output
# Output [[9 9 4] [8 8 1]] [[5 3 6] [3 3 3]] [[45 27 24] [24 24 3]]
Elemen pada arr_12
merupakan perkalian elemen arr_1
dan arr_2
pada posisi yang sama.
Hal ini juga berlaku untuk operasi pembagian seperti ditunjukkan pada kode berikut:
Python
arr_13 = arr_1 / arr_2 print(arr_1, arr_2, arr_13, sep="\n")
Output
# Output [[9 9 4] [8 8 1]] [[5 3 6] [3 3 3]] [[1.8 3. 0.66666667] [2.66666667 2.66666667 0.33333333]]
Contoh berikutnya yaitu perkalian arr_4
yang berukuran 3×4 dengan arr_5
yang berukuran 3×1:
Python
arr_14 = arr_4 * arr_5 print(arr_4, arr_5, arr_14, sep="\n")
Output
# Output [[9 9 4 8] [8 1 5 3] [6 3 3 3]] [[2] [1] [9]] [[18 18 8 16] [ 8 1 5 3] [54 27 27 27]]
Pada contoh penghitungan arr_14
setiap elemen di baris pertama arr_4
yaitu [9 9 4 8]
dikali dengan elemen pertama pada arr_5
yaitu [2]
dan diperoleh hasil [18 18 8 16]
. Proses yang sama berlaku untuk baris ke-2 dan ke-3.
Untuk perkalian dan pembagian antara numpy array dan skalar, setiap elemen pada array akan dikali atau dibagi dengan nilai skalar tersebut.
Python
arr_15 = arr_10 / 3 print(arr_10, arr_15, sep="\n")
Output
# Output [[9 9 4] [8 8 1]] [[3. 3. 1.33333333] [2.66666667 2.66666667 0.33333333]]
Perkalian Matriks
Perkalian matriks valid jika ukuran kolom pada matriks pertama sama dengan ukuran baris pada matriks kedua. Misalkan terdapat matriks A dengan ukuran 4 x 5 dan matriks B dengan ukuran 5 x 3 maka perkalian matriks A dan Matriks B akan menghasilkan matriks berukuran 4 x 3. Operator untuk perkalian matriks adalah simbol “@
“.
Python
np.random.seed(100) arr_16 = np.random.randint(0, 20, (4, 5)) arr_17 = np.random.randint(0, 20, (5, 3)) arr_18 = arr_16 @ arr_17 print(arr_16, arr_17, arr_18, sep="\n")
Output
# Output [[ 8 3 7 15 16] [10 2 2 2 14] [ 2 17 16 15 4] [11 16 9 2 12]] [[ 4 1 13] [19 4 4] [ 3 7 17] [15 1 14] [ 7 16 2]] [[447 340 477] [212 258 228] [632 261 584] [489 332 412]]
Transpose Matriks
Transpose matriks adalah operasi merubah dimensi matriks yang berukuran N x M menjadi matriks baru berukuran M x N. Elemen pada baris pertama akan berubah menjadi elemen pada kolom pertama, begitu juga untuk baris lainnya akan berubah menjadi elemen kolom pada urutan yang bersesuaian. Transformasi matriks pada numpy array dilakukan dengan mengakses properti “T
” pada objek array tersebut.
Python
np.random.seed(100) arr_19 = np.random.randint(0, 10, (4, 2)) arr_20 = arr_19.T print(arr_19, arr_20, sep="\n")
Output
# Output [[8 8] [3 7] [7 0] [4 2]] [[8 3 7 4] [8 7 0 2]]
Alternatif Fungsi Operator
Operasi aritmetika yang telah dibahas sebelumnya menggunakan simbol-simbol operator tertentu dalam prosesnya. Sebagai alternatif, numpy menyediakan fungsi-fungsi yang dapat menghasilkan output yang sama seperti sebelumnya.
Python
# arr_a + arr_b np.add(arr_a, arr_b) # arr_c - arr_d np.subtract(arr_c, arr_d) # arr_e * arr_f (dot product) np.multiply(arr_e, arr_f) # arr_g / arr_h np.divide(arr_g, arr_h) # arr_i @ arr_j np.matmul(arr_i, arr_j) # arr_k.T (Transpose) np.transpose(arr_k)
Selain fungsi-fungsi operasi di atas terdapat fungsi aritmetika lainnya seperti akar kuadrat, eksponensial, logaritma, trigonometri dan sebagainya. Beberapa diantaranya adalah sebagai berikut:
Python
# Beberapa fungsi aritmetika lainnnya # menghitung akar kuadrat np.sqrt(arr_l) # menghitung nilai exponensial (e^) np.exp(arr_m) # menghitung logaritma natural np.log(arr_n) # menghitung nilai sinus np.sin(arr_o)
Invers Matriks
Menghitung invers dari sebuah matriks pada numpy dapat menggunakan fungsi linalg.inv
. Fungsi ini akan mengembalikan invers dari suatu matriks. Fungsi akan menghasilkan error jika matriks yang diberikan bukan matriks persegi, atau jika matriks tidak memiliki invers.
Python
np.random.seed(100) arr_21 = np.random.randint(0, 20, (4, 4)) arr_22 = np.linalg.inv(arr_21) print(arr_21, arr_22, sep="\n")
Output
# Output [[ 8 3 7 15] [16 10 2 2] [ 2 14 2 17] [16 15 4 11]] [[ 0.15327381 0.71354167 0.27380952 -0.76190476] [-0.21130952 -0.76041667 -0.30952381 0.9047619 ] [-0.36904762 -2.20833333 -1.04761905 2.52380952] [ 0.19940476 0.80208333 0.4047619 -0.95238095]]
Untuk mengecek hasil invers kita dapat mengalikan matriks arr_21
dengan inversnya yaitu arr_22
. Perkalian sebuah matriks dengan inversnya sendiri akan menghasilkan matriks identitas. Namun dalam hal ini, karena proses pendekatan komputasi iteratif dan ketelitian komputer dalam representasi angka desimal mungkin hasil yang diperoleh tidak akan tepat bernilai 1 dan 0.
Python
print(arr_21 @ arr_22) print(np.round(arr_21 @ arr_22, 0))
Output
# Output [[ 1.00000000e+00 3.33066907e-16 -7.21644966e-16 1.99840144e-15] [ 1.66533454e-16 1.00000000e+00 -3.33066907e-16 4.44089210e-16] [ 1.11022302e-16 -3.33066907e-16 1.00000000e+00 -2.22044605e-16] [-1.11022302e-16 1.66533454e-15 -9.43689571e-16 1.00000000e+00]] [[ 1. 0. -0. 0.] [ 0. 1. -0. 0.] [ 0. -0. 1. -0.] [-0. 0. -0. 1.]]
Fungsi Summary Statistik
Terdapat beberapa fungsi yang dapat kita gunakan untuk menghasilkan nilai ringkasan statistik dari data numpy array. Beberapa diantaranya adalah sum
, mean
, min
, median
, max
, var
, dan std
.
Python
np.random.seed(100) arr_23 = np.random.randint(0, 20, 10) print(arr_23) print("SUM :", arr_23.sum()) # atau np.sum(arr_23) print("MEAN :", arr_23.mean()) # atau np.mean(arr_23) print("MIN :", arr_23.min()) # atau np.min(arr_23) print("MEDIAN :", np.median(arr_23)) print("MAX :", arr_23.max()) # atau np.max(arr_23) print("VARIANCE :", arr_23.var()) # atau np.var(arr_23) print("STD DEV :", arr_23.std()) # atau np.std(arr_23)
Output
# Output [ 8 3 7 15 16 10 2 2 2 14] SUM : 79 MEAN : 7.9 MIN : 2 MEDIAN : 7.5 MAX : 16 VARIANCE : 28.689999999999998 STD DEV : 5.3563046963368315
Fungsi-fungsi di atas tidak hanya berlaku untuk array 1-Dimensi, namun juga array 2-Dimensi. Pada array 2-Dimensi dapat diatur opsi untuk melakukan proses menurut perspektif baris atau kolom. Dengan menentukan nilai parameter axis
, maka proses ringkasan statistik dapat dilihat secara total, menurut baris atau menurut kolom.
Python
np.random.seed(100) arr_24 = np.random.randint(0, 20, (3, 4)) print(arr_24) # menjumlahkan nilai seluruh elemen array print("SUM TOTAL :", arr_24.sum()) # menjumlahkan nilai elemen baris untuk setiap kolom print("SUM BARIS (BY KOLOM):", arr_24.sum(axis=0)) # menjumlahkan nilai elemen kolom untuk setiap baris print("SUM KOLOM (BY BARIS):", arr_24.sum(axis=1))
Output
# Output [[ 8 3 7 15] [16 10 2 2] [ 2 14 2 17]] SUM TOTAL : 98 SUM BARIS (BY KOLOM) : [26 27 11 34] SUM KOLOM (BY BARIS): [33 30 35]
Jika nilai parameter axis
tidak ditentukan, maka operasi dilakukan pada seluruh elemen. Pada contoh ini yaitu menghitung jumlah nilai elemen pada array dan diperoleh hasil 98.
Jika parameter axis
bernilai 0, maka operasi dilakukan menurut kolom (column-wise). Penjumlahan dilakukan untuk semua baris pada masing-masing kolom. Misalkan untuk kolom pertama yaitu 8 + 16 + 2 = 26
.
Sebaliknya jika axis
bernilai 1, operasi dilakukan menurut baris (row-wise). Penjumlahan dilakukan untuk semua kolom pada baris tersebut yaitu 8 + 3 + 7 + 15 = 33
.
Proses yang sama juga berlaku untuk setiap fungsi ringkasan statistik yang sudah dijelaskan sebelumnya.
Ringkasan
Pada bagian ini kita sudah membahas mengenai operasi dan fungsi aritmetika pada numpy array. Operasi ini meliputi penjumlahan, pengurangan, perkalian, pembagian, transpose dan invers matriks. Lebih lanjut juga telah dibahas fungsi-fungsi untuk menghitung ringkasan statistik seperti mean dan variance. Bagian terakhir yang juga penting adalah operasi pada numpy array khususnya pada array 2-Dimensi yang dapat dilakukan menurut perspektif baris atau kolom dengan menentukan parameter axis
.
Fungsi-fungsi yang telah disampaikan hanya sebagian dari fungsi dasar dan umum digunakan dalam pemrosesan objek numpy array. Pada library numpy sendiri memiliki banyak sekali fungsi lainnya yang dapat dieksplorasi lebih jauh sesuai keperluan.