Saat kita mulai menjelajahi Machine Learning atau Ilmu Data, kita sering menemukan bahwa array NumPy sangat sering digunakan daripada daftar python. Sebagai seorang pemula, sangat sulit untuk memahami mengapa kami melakukannya. Tampilannya sangat mirip dengan pemula. Jadi, hari ini saya akan mencoba memberikan representasi visual mengapa kita harus menggunakan array NumPy daripada daftar python.

Katakanlah, kita harus mengalikan dua daftar angka dan menampilkan jumlah dari daftar yang dihasilkan dengan python. Lalu apa yang akan kita lakukan? Pendekatan yang sangat naif diberikan di bawah ini:

list1 = [1, 3, 4]
list2 = [4, 5, 6]

result = list1[0]*list2[0] + list1[1]*list2[1] + list1[2]*list2[2]

print(result)

Tapi, apa jadinya jika ada 1000 angka di daftarnya? Sekarang, bisa dibilang kita bisa menggunakan loop untuk melakukannya.

list1 = [1, 3, 4, 7, 9, 11]
list2 = [4, 5, 6, 8, 12, 14]

result = 0
for i in range(0, len(list1)):
    result += (list1[i] * list2[i])

print(result)

Meskipun penerapan ini sedikit lebih baik daripada penerapan pertama, namun penerapannya masih kurang efisien. Agar lebih efisien, sekarang saya akan memperkenalkan Anda pada array NumPy. Untuk melakukannya, pertama-tama, saya akan mengubah dua daftar yang diberikan menjadi array NumPy.

import numpy as np # it is an unofficial standard to use np for numpy

# this line will convert the list into numpy array
arr1 = np.array(list1)
arr2 = np.array(list2)

Sekarang, kita akan menggunakan Fungsi NumPy Dotuntuk melakukan tugas kita.

result = np.dot(arr1, arr2)
print(result)

Metode ini disebut vektorisasi. Fungsi titik NumPy ini adalah implementasi vektor dari operasi perkalian titik antara dua vektor dan terutama jika n (panjang daftar) besar, ini akan berjalan jauh lebih cepat daripada dua contoh kode sebelumnya. Saya ingin menekankan bahwa vektorisasi sebenarnya memiliki dua manfaat berbeda. Pertama, ini membuat kode lebih pendek, sekarang hanya satu baris kode. Bukankah itu keren? Kedua, ini juga mengakibatkan kode Anda berjalan jauh lebih cepat dibandingkan dua implementasi sebelumnya yang tidak menggunakan vektorisasi. Alasan mengapa implementasi vektorisasi jauh lebih cepat ada di balik layar. Fungsi NumPy dot dapat menggunakan perangkat keras paralel di komputer Anda dan ini berlaku baik Anda menjalankannya di komputer normal, yaitu pada CPU komputer normal, atau jika Anda menggunakan GPU, unit prosesor grafis, sering kali hal tersebut digunakan untuk mempercepat pekerjaan pembelajaran mesin. Kemampuan fungsi NumPy dot untuk menggunakan perangkat keras paralel membuatnya jauh lebih efisien daripada for loop atau perhitungan sekuensial yang kita lihat sebelumnya. Sekarang, versi ini jauh lebih praktis bila n besar.

Sekarang, kita akan melihat apakah vektorisasi sebenarnya lebih cepat atau tidak. Untuk melihatnya jalankan kode yang diberikan di bawah ini.

a = np.random.rand(10000000)  # very large arrays
b = np.random.rand(10000000)

tic = time.time()  # capture start time
c = np.dot(a, b)
toc = time.time()  # capture end time

print(f"np.dot(a, b) =  {c:.4f}")
print(f"Vectorized version duration: {1000*(toc-tic):.4f} ms ")

tic = time.time()  # capture start time
c = my_dot(a,b)
toc = time.time()  # capture end time

print(f"my_dot(a, b) =  {c:.4f}")
print(f"loop version duration: {1000*(toc-tic):.4f} ms ")

del(a);del(b)  #remove these big arrays from memory


# this code is taken from 'Machine Learning Specialization' course of Coursera.

Output dari kodenya adalah:

np.dot(a, b) =  2501072.5817
Vectorized version duration: 191.1116 ms 
my_dot(a, b) =  2501072.5817
loop version duration: 10142.9269 ms

Jadi, vektorisasi memberikan kecepatan yang besar dalam contoh ini. Hal ini karena NumPy memanfaatkan paralelisme data yang tersedia di perangkat keras yang mendasarinya dengan lebih baik. Hal ini penting dalam Machine Learning yang kumpulan datanya sering kali berukuran sangat besar.

Singkatnya, vektorisasi membuat kode Anda lebih pendek, sehingga mudah-mudahan lebih mudah untuk ditulis dan dibaca oleh Anda atau orang lain, dan juga membuatnya berjalan lebih cepat.

Ada lebih pentingnya menggunakan array NumPy. Saya baru saja mendemonstrasikan salah satunya agar mudah dipahami.