Jika ada paket yang harus digunakan untuk kalkulasi atau komputasi ilmiah apa pun, maka pujiannya diberikan kepada pahlawan kita, NumPy!
Python sudah efisien. Jadi mengapa perpustakaan NumPy dibuat?
- NumPy Array adalah alternatif dari Daftar Python
- Tidak seperti Array Python, array NumPy dapat melakukan penghitungan pada seluruh array
- Ini berfungsi sebagai landasan penting untuk paket lain, misalnya: scikit-learn
- Banyak fungsi tersedia di NumPy dengan penggunaan yang lebih nyaman
- Tentu saja daftarnya belum lengkap tanpa menyebutkan bahwa mereka efisien dan cepat
Selain itu, NumPy juga lebih disukai karena merupakan
- objek array N-dimensi yang kuat
- fungsi canggih (penyiaran).
- alat untuk mengintegrasikan kode C/C++ dan Fortran
- aljabar linier yang berguna, transformasi Fourier, dan kemampuan bilangan acak
Terlepas dari fungsinya yang luar biasa dalam komputasi ilmiah, NumPy menangani data multidimensi secara efisien terutama jika menyangkut data umum. Hal ini mendorong NumPy untuk berintegrasi dengan berbagai database.
Mari kita mulai dengan NumPy!
Kita akan menggunakan array atau matriks secara ekstensif sehingga untuk mempermudah penggunaannya, mari gunakan NumPy. Kita perlu mengimpor perpustakaan:
In[]: import numpy as np # np is just an alias, you don't want to type numpy all the time
In[]: my_list = [1,2,3,4] In[]: my_array = np.array(my_list) In[]: my_array Out[]: array([1, 2, 3, 4])
In[]: my_list1 = [1, 2, 3, 4] In[]: my_list2 = [11, 22, 33, 44] In[]: my_list = [my_list1, my_list2] In[]: my_array = np.array(my_list) In[]: my_array Out[]: array([[ 1, 2, 3, 4], [11, 22, 33, 44]])
In[]: my_array.shape Out[]: (2, 4)
In[]: my_array.dtype Out[]: dtype('int32')
In[]: np.zeros(5) Out[]: array([0., 0., 0., 0., 0.]) # notice these are floating type
In[]: np.ones([5, 5]) Out[]: array([[1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.]])
In[]: np.eye(5) Out[]: array([[1., 0., 0., 0., 0.], [0., 1., 0., 0., 0.], [0., 0., 1., 0., 0.], [0., 0., 0., 1., 0.], [0., 0., 0., 0., 1.]])
In[]: height = [1.73, 1.68, 1.71] In[]: height Out[]: [1.73, 1.68, 1.71] In[]: weight = [65.4, 59.2, 63.6] In[]: weight Out[]: [65.4, 59.2, 63.6] # Calculating BMI for the present In[]: weight / height ** 2 TypeError: unsupported operand type(s) for ** 'list' and 'int'
Sekarang ini terjadi karena python tidak tahu bagaimana melakukan perhitungan atau komputasi pada daftar.
Anda dapat menghitung BMI untuk setiap orang secara terpisah. Tapi itu sangat tidak efisien. Solusi elegan adalah dengan menggunakan numpy('num'-eric'py'-thon) .
In[]: np_height = np.array(height) In[]: np_height Out[]: array([1.73, 1.68, 1.71]) In[]: np_weight = np.array(weight) In[]: np_weight Out[]: array([65.4, 59.2, 63.6]) In[]: BMI = np_height / np_weight ** 2 In[]: BMI Out[]: array([21.85171573, 20.97505669, 21.75028214])
Bukti lain bahwa daftar python berbeda dari array numpy adalah tentang bagaimana mereka melakukan operasi matematika di antara dirinya sendiri
# Python List In[]: python_list = [1, 2, 3] In[]: python_list + python_list Out[]: [1, 2, 3, 1, 2, 3] #appends # Numpy Array In[]: numpy_array = np.array([1, 2, 3]) In[]: numpy_array + numpy_array Out[]: array([2, 4, 6]) #performs addition
# Let us recall the BMI we calculated above In[]: BMI Out[]: array([21.85171573, 20.97505669, 21.75028214]) In[]: BMI[1] Out[]: 20.97505668934241 In[]: BMI > 21.8 Out[]: array([ True, False, False]) In[]: BMI[BMI > 21.8] Out[]: array([21.85171573])
Ssst! Berikut cara membuat array numpy(umum digunakan)
Syntax: np.arange([start], [stop], [step_size]) # return evenly spaced values within a given interval In[]: np.arange(5) Out[]: array([0, 1, 2, 3, 4]) In[]: np.arange(5, 50, 2) Out[]: array([ 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49])
In[]: arr = np.arange(0, 11) In[]: arr Out[]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) In[]: arr[8] Out[]: 8 # How to fetch values from Nth location to Mth location? # This is technically called SLICING if you assign to other variable In[]: arr[1:5] Out[]: array([1, 2, 3, 4]) # Lets make first 5 range values equate to 500 In[]: arr[0:5] = 500 In[]: arr Out[]: array([500, 500, 500, 500, 500, 5, 6, 7, 8, 9, 10]) # Slicing In[]: sliced_array = arr[0:6] In[]: sliced_array Out[]: array([500, 500, 500, 500, 500, 5]) # See the magic here In[]: sliced_array[5] = 600 In[]: sliced_array Out[]: array([500, 500, 500, 500, 500, 600]) In[]: arr Out[]: array([500, 500, 500, 500, 500, 600, 6, 7, 8, 9, 10]) # Wait... WHAT?! But we assigned the sliced values to new numpy array. Why is arr[5] showing 600?
Jadi irisan bukanarray yang terpisah. Ini adalah salinandari array asli. Setiap perubahan pada irisan mencerminkan array numpy asli. Hal ini dilakukan oleh numpy untuk menghapus penggunaan memori yang tidak diperlukan.
Jadi bagaimana sebenarnya kita bisa menyalin array numpy ke array lain secara eksplisit?
In[]: arr_copy = arr.copy() In[]: arr[5] = 5 In[]: arr Out[]: array([500, 500, 500, 500, 500, 5, 6, 7, 8, 9, 10]) In[]: arr_copy Out[]: array([500, 500, 500, 500, 500, 600, 6, 7, 8, 9, 10]) # Voila! It did not change this time!
# arange creates serial values from 0 to 49 # reshape is used to shape the matrix. # Reshape works like - reshape(rows, columns) In[]: arr = np.arange(50).reshape(10,5) In[]: arr Out[]: array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19], [20, 21, 22, 23, 24], [25, 26, 27, 28, 29], [30, 31, 32, 33, 34], [35, 36, 37, 38, 39], [40, 41, 42, 43, 44], [45, 46, 47, 48, 49]]) # Array Transposition In[]: arr.T Out[]: array([[ 0, 5, 10, 15, 20, 25, 30, 35, 40, 45], [ 1, 6, 11, 16, 21, 26, 31, 36, 41, 46], [ 2, 7, 12, 17, 22, 27, 32, 37, 42, 47], [ 3, 8, 13, 18, 23, 28, 33, 38, 43, 48], [ 4, 9, 14, 19, 24, 29, 34, 39, 44, 49]])
Mari kita simpan sampai di sini untuk saat ini. Ini adalah pengenalan singkat tentang Numpy. Ikuti saya untuk mendapatkan pembaruan rutin tentang tutorial semacam ini.
Jika Anda menikmati membaca artikel ini, silakan kunjungi artikel ini.
Tambahkan saya di LinkedIn, Twitter dan Github