Python : Tutorial Operasi Aritmetika pada Numpy Array

Operasi Aritmetika Numpy Array Python

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.

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.

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi