Saturday, June 9, 2018

Dasar Array NumPy

Manipulasi data dalam Python hampir identik dengan manipulasi array NumPy: bahkan alat yang lebih baru seperti Pandas dibangun di sekitar array NumPy. Bagian ini akan menyajikan beberapa contoh penggunaan manipulasi array NumPy untuk mengakses data dan subarray, dan untuk membagi, membentuk kembali, dan menggabungkan array.

Script pada materi ini dapat di download di https://drive.google.com/open?id=11BhARn-6HxSNttWO91lXkwbwLJYmBW67

Atribut Array NumPy
Pertama mari kita bahas beberapa atribut array yang berguna. Kita akan mulai dengan mendefinisikan tiga larik acak, larik satu dimensi, dua dimensi, dan tiga dimensi. Kami akan menggunakan generate nomor acak Numpy, yang akan dibibit dengan nilai yang ditetapkan untuk memastikan bahwa susunan acak yang sama dihasilkan setiap kali kode ini dijalankan:
import numpy as np
np.random.seed(0)  # seed for reproducibility

x1 = np.random.randint(10, size=6)  # One-dimensional array
x2 = np.random.randint(10, size=(3, 4))  # Two-dimensional array
x3 = np.random.randint(10, size=(3, 4, 5))  # Three-dimensional array

Setiap larik memiliki atribut ndim (jumlah dimensi), shape (ukuran setiap dimensi), dan size (ukuran total larik):
print("x3 ndim: ", x3.ndim)
print("x3 shape:", x3.shape)
print("x3 size: ", x3.size)
x3 ndim:  3
x3 shape: (3, 4, 5)
x3 size:  60

Atribut lain yang berguna adalah dtype, tipe data dari array:
print("itemsize:", x3.itemsize, "bytes")
print("nbytes:", x3.nbytes, "bytes")
itemsize: 8 bytes
nbytes: 480 bytes
Secara umum, bahwa nbytes sama dengan itemsize kali size.

Array Indexing: Mengakses Element Tunggal
Jika Anda sudah familiar dengan pengindeksan list standar Python, pengindeksan di NumPy akan terasa cukup akrab. Dalam larik satu dimensi, nilai ((dihitung dari nol) dapat diakses dengan menentukan indeks yang diinginkan dalam tanda kurung siku, seperti halnya list Python:
x1
array([5, 0, 3, 3, 7, 9])
x1[0]
5
x1[4]
7

Untuk mengindeks dari ujung akhir larik, Anda dapat menggunakan indeks negatif:
x1[-1]
9
x1[-2]
7

Dalam susunan multi-dimensi, item dapat diakses menggunakan tuple indeks yang dipisahkan koma:
x2
array([[3, 5, 2, 4],
       [7, 6, 8, 8],
       [1, 6, 7, 7]])

x2[0, 0]
3

x2[2, 0]
1

x2[2, -1]
7

Nilai juga dapat dimodifikasi menggunakan notasi indeks di atas:
x2[0, 0] = 12
x2
array([[12,  5,  2,  4],
       [ 7,  6,  8,  8],
       [ 1,  6,  7,  7]])

Perlu diingat bahwa, tidak seperti list Python, array NumPy memiliki tipe tetap. Ini berarti, misalnya, jika Anda mencoba memasukkan nilai titik-mengambang ke array bilangan bulat, nilainya akan dipotong secara diam-diam.

x1[0] = 3.14159  # this will be truncated!
x1
array([3, 0, 3, 3, 7, 9])

Array Slicing: Pengaksesan Subarrays
Sama seperti kita dapat menggunakan tanda kurung siku untuk mengakses elemen-elemen array individual, kita juga dapat menggunakannya untuk mengakses subarray dengan notasi slice, ditandai dengan karakter titik dua (:). Sintaks slicing NumPy mengikuti dari list Python standar; untuk mengakses sebagian array x, gunakan ini:
x[start:stop:step]
Jika salah satu dari ini tidak ditentukan, mereka default ke nilai awal = 0, stop = ukuran dimensi, langkah = 1. Kita akan mengakses sub-larik dalam satu dimensi dan dalam beberapa dimensi.

One-dimensional subarrays
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

x[:5]  # first five elements
array([0, 1, 2, 3, 4])

x[5:]  # elements after index 5
array([5, 6, 7, 8, 9])

x[4:7]  # middle sub-array
array([4, 5, 6])

x[::2]  # every other element
array([0, 2, 4, 6, 8])

x[1::2]  # every other element, starting at index 1
array([1, 3, 5, 7, 9])

Kasus yang berpotensi membingungkan adalah ketika nilai langkahnya negatif. Dalam hal ini, default untuk mulai dan berhenti bertukar. Ini menjadi cara mudah untuk membalikkan suatu array:

x[::-1]  # all elements, reversed
array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

x[5::-2]  # reversed every other from index 5
array([5, 3, 1])

Multi-dimensional subarrays
Irisan multi-dimensi bekerja dengan cara yang sama, dengan beberapa slices dipisahkan oleh koma. Sebagai contoh:
x2
array([[12,  5,  2,  4],
       [ 7,  6,  8,  8],
       [ 1,  6,  7,  7]])

x2[:2, :3]  # two rows, three columns
array([[12,  5,  2],
       [ 7,  6,  8]])

x2[:3, ::2]  # all rows, every other column
array([[12,  2],
       [ 7,  8],
       [ 1,  7]])

Akhirnya, dimensi subarray bahkan dapat dibalik bersama-sama:
x2[::-1, ::-1]
array([[ 7,  7,  6,  1],
       [ 8,  8,  6,  7],
       [ 4,  2,  5, 12]])

Akses array rows dan columns
Satu rutin yang biasa dibutuhkan adalah mengakses baris atau kolom tunggal dari suatu array. Ini dapat dilakukan dengan menggabungkan pengindeksan dan pengirisan/slicing, menggunakan irisan kosong yang ditandai oleh satu titik dua (:):

print(x2[:, 0])  # first column of x2
[12  7  1]

print(x2[0, :])  # first row of x2
[12  5  2  4]

Dalam kasus akses baris, slice kosong dapat dihilangkan untuk sintaks yang lebih ringkas:
print(x2[0])  # equivalent to x2[0, :]
[12  5  2  4]

Subarrays as no-copy views
Satu hal yang penting dan sangat berguna untuk diketahui tentang irisan larik adalah mereka mengembalikan  views/tampilan alih-alih copy/salinan data larik. Ini adalah salah satu area di mana NumPy array mengiris berbeda dari memotong daftar Python: dalam daftar, irisan akan salinan. Pertimbangkan array dua dimensi kami dari sebelumnya:






Lanjut lain waktu ...

No comments:

Post a Comment