Skip to main content

Unique, Indexing & Slicing

Setelah memahami cara membuat NumPy array, langkah berikutnya adalah belajar bagaimana melihat, memilih, dan mengambil data tertentu dari array.

Ketika bekerja dengan dataset, kita tidak selalu membutuhkan seluruh data sekaligus. Sering kali kita hanya ingin:

  • Mengetahui nilai apa saja yang unik.
  • Mengambil satu elemen.
  • Mengambil satu baris.
  • Mengambil satu kolom.
  • Mengambil bagian tertentu dari array.
  • Mengambil data dari array multidimensi.

NumPy menyediakan berbagai kemampuan untuk kebutuhan tersebut.

Pada materi ini kita akan mempelajari:

  • np.unique()
  • Konsep vector, matrix, dan ndarray.
  • Indexing.
  • Slicing.
  • Indexing pada array 1D, 2D, 3D, dan 4D.
  • Cara memahami shape ketika melakukan indexing dan slicing.

1. Mencari Elemen Unik dengan np.unique()

Ketika bekerja dengan dataset, kita sering ingin mengetahui nilai apa saja yang terdapat di dalam data.

Misalnya sebuah array memiliki data:

numbers = np.array([
1, 2, 2, 3, 3, 3, 4, 4
])

Jika kita ingin mengetahui nilai yang berbeda saja, kita dapat menggunakan:

np.unique(numbers)

Hasil:

[1 2 3 4]

np.unique() menghilangkan nilai yang duplikat dan mengembalikan nilai yang unik.


2. Contoh np.unique() pada Array 2D

np.unique() juga dapat digunakan pada array multidimensi.

Contoh:

import numpy as np

np.random.seed(0)

random_array = np.random.randint(
0,
10,
size=(5, 3)
)

print(random_array)

Misalnya menghasilkan:

[[5 0 3]
[3 7 9]
[3 5 2]
[4 7 6]
[8 8 1]]

Kemudian:

unique_numbers = np.unique(random_array)

print(unique_numbers)

Hasilnya akan berisi nilai unik yang terdapat di seluruh array:

[0 1 2 3 4 5 6 7 8 9]

Perhatikan bahwa np.unique() pada contoh tersebut mencari nilai unik dari seluruh elemen array, bukan hanya satu baris atau satu kolom.


3. Kegunaan np.unique() dalam Data Science

Mengetahui nilai unik sangat berguna ketika melakukan eksplorasi data.

Misalnya kita memiliki data kategori:

["Toyota", "Honda", "Toyota", "BMW", "Honda"]

Kita mungkin ingin mengetahui kategori yang tersedia:

Toyota
Honda
BMW

Dalam NumPy, konsep tersebut dapat dilakukan menggunakan:

np.unique(data)

Dalam proses Data Science, informasi nilai unik dapat membantu kita:

  • Memahami kategori dalam dataset.
  • Menemukan data yang tidak sesuai.
  • Memeriksa hasil preprocessing.
  • Memeriksa nilai pada data kategorikal.
  • Melakukan eksplorasi awal terhadap dataset.

4. Vector, Matrix, dan Array

Sebelum mempelajari indexing, kita perlu memahami beberapa istilah.

Vector

Vector biasanya digunakan untuk menyebut array satu dimensi.

Contoh:

vector = np.array([1, 2, 3])

Shape:

(3,)

Secara visual:

[1 2 3]

Matrix

Matrix biasanya digunakan untuk menyebut array dua dimensi.

Contoh:

matrix = np.array([
[1, 2, 3],
[4, 5, 6]
])

Shape:

(2, 3)

Secara visual:

1 2 3
4 5 6

ndarray

ndarray adalah struktur data utama NumPy yang dapat memiliki satu atau lebih dimensi.

Dengan demikian:

1D → ndarray
2D → ndarray
3D → ndarray
4D → ndarray
...

Istilah vector dan matrix lebih banyak digunakan untuk menggambarkan struktur atau konteks matematis, sedangkan ndarray merupakan tipe objek yang digunakan NumPy.


5. Zero-Based Indexing

NumPy menggunakan zero-based indexing.

Artinya, index dimulai dari 0.

Misalnya:

numbers = np.array([10, 20, 30, 40])

Indexnya:

Index 0 1 2 3
↓ ↓ ↓ ↓
Value 10 20 30 40

Sehingga:

numbers[0]

menghasilkan:

10

Sedangkan:

numbers[2]

menghasilkan:

30

6. Indexing pada Array 1D

Untuk array satu dimensi, kita hanya membutuhkan satu index.

Contoh:

A1 = np.array([1, 2, 3])

print(A1[0])

Output:

1

Untuk elemen kedua:

print(A1[1])

Output:

2

Untuk elemen terakhir:

print(A1[2])

Output:

3

Kita juga dapat menggunakan index negatif.

Contoh:

print(A1[-1])

Hasil:

3

Index -1 berarti elemen terakhir.


7. Indexing pada Array 2D

Pada array dua dimensi, kita dapat mengakses data berdasarkan baris dan kolom.

Contoh:

A2 = np.array([
[1, 2, 3],
[4, 5, 6]
])

Strukturnya:

Kolom
0 1 2
─────────
Baris 0│ 1 2 3
Baris 1│ 4 5 6

Untuk mengambil baris pertama:

A2[0]

hasilnya:

[1 2 3]

Untuk mengambil elemen pada baris pertama dan kolom kedua:

A2[0, 1]

hasilnya:

2

Urutannya:

array[baris, kolom]

8. Contoh Indexing 2D

Dengan array:

A2 = np.array([
[1, 2, 3],
[4, 5, 6]
])

Beberapa contoh:

A2[0, 0]

hasil:

1
A2[0, 2]

hasil:

3
A2[1, 0]

hasil:

4
A2[1, 2]

hasil:

6

Pola yang perlu diingat:

A2[row, column]

9. Indexing pada Array 3D

Ketika array memiliki tiga dimensi, kita membutuhkan tiga index.

Contoh:

A3 = np.random.randint(
10,
size=(2, 3, 3)
)

Shape:

(2, 3, 3)

Artinya:

2 bagian
×
3 baris
×
3 kolom

Secara konsep:

Array 3D

├── Bagian 0
│ ├── Baris 0
│ ├── Baris 1
│ └── Baris 2

└── Bagian 1
├── Baris 0
├── Baris 1
└── Baris 2

Untuk mengambil bagian pertama:

A3[0]

Hasilnya adalah sebuah array 2D berukuran:

(3, 3)

10. Indexing Elemen pada Array 3D

Untuk mengambil satu elemen dari array 3D, kita dapat menggunakan:

array[dimensi_pertama, dimensi_kedua, dimensi_ketiga]

Contoh:

A3[0, 1, 2]

Cara membacanya:

Bagian pertama

Baris kedua

Kolom ketiga

Dengan demikian, kita mengambil satu nilai tertentu dari array 3D.


11. Memahami Shape Sebelum Indexing

Sebelum melakukan indexing pada array multidimensi, biasakan memeriksa .shape.

Contoh:

A3.shape

Misalnya hasilnya:

(2, 3, 3)

Kita dapat membaca:

Dimensi 1 → 2
Dimensi 2 → 3
Dimensi 3 → 3

Kemudian indexing:

A3[0, 1, 2]

menggunakan tiga index karena array memiliki tiga dimensi.

Memahami .shape terlebih dahulu dapat membantu menghindari kesalahan indexing.


12. Slicing pada NumPy

Selain mengambil satu elemen, kita juga dapat mengambil sebagian data menggunakan slicing.

Slicing digunakan untuk mengambil rentang elemen dari array.

Untuk array satu dimensi:

numbers = np.array([
10, 20, 30, 40, 50
])

Kita dapat mengambil tiga elemen pertama:

numbers[:3]

Hasil:

[10 20 30]

Aturan slicing secara umum:

start : stop

Nilai stop tidak termasuk.


13. Slicing pada Array 2D

Untuk array dua dimensi, kita dapat melakukan slicing pada baris dan kolom.

Contoh:

A2 = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

Kita dapat mengambil dua baris pertama:

A2[:2]

Hasil:

[[1 2 3]
[4 5 6]]

Kita juga dapat mengambil dua kolom pertama:

A2[:, :2]

Hasil:

[[1 2]
[4 5]
[7 8]]

Pola:

array[baris, kolom]

Tanda : berarti mengambil seluruh bagian pada dimensi tersebut.


14. Slicing pada Array 3D

Untuk array 3D, kita dapat melakukan slicing pada setiap dimensi.

Misalnya:

A3 = np.random.randint(
10,
size=(2, 3, 3)
)

Kita dapat mengambil sebagian data:

A3[:2, :2, :2]

Cara membacanya:

Dimensi pertama → ambil 2 bagian pertama
Dimensi kedua → ambil 2 baris pertama
Dimensi ketiga → ambil 2 kolom pertama

Dengan demikian, kita mendapatkan subset dari array asli.


15. Pola Slicing Multidimensi

Pada array multidimensi, pola umum slicing adalah:

array[dimensi_1, dimensi_2, dimensi_3, ...]

Misalnya array 3D:

A3[:2, :2, :2]

Terdapat tiga bagian slicing:

:2
:2
:2

Masing-masing diterapkan pada dimensi yang sesuai.


16. Slicing Array 4D

NumPy juga dapat bekerja dengan array empat dimensi.

Contoh:

A4 = np.random.randint(
10,
size=(2, 3, 4, 5)
)

Shape:

(2, 3, 4, 5)

Artinya array memiliki empat dimensi:

Dimensi 1 → 2
Dimensi 2 → 3
Dimensi 3 → 4
Dimensi 4 → 5

Untuk mengambil empat elemen pertama dari dimensi terdalam:

A4[:, :, :, :4]

Tiga bagian pertama menggunakan : sehingga seluruh data pada dimensi tersebut dipertahankan.

Bagian terakhir:

:4

mengambil empat elemen pertama pada dimensi terdalam.


17. Memahami Dimensi Terluar dan Terdalam

Pada shape:

(2, 3, 4, 5)

angka yang paling kiri merupakan dimensi terluar, sedangkan angka yang paling kanan merupakan dimensi terdalam.

Secara sederhana:

(2, 3, 4, 5)
↑ ↑
luar dalam

Sehingga:

A4[:, :, :, :4]

mengubah bagian terakhir dari:

5 elemen

menjadi:

4 elemen

sedangkan dimensi lainnya tetap dipertahankan.


18. Slicing dengan Step

Slicing juga dapat menggunakan step.

Sintaks:

start : stop : step

Contoh:

numbers = np.array([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
])

Mengambil setiap dua elemen:

numbers[::2]

Hasil:

[0 2 4 6 8]

Contoh lainnya:

numbers[1::2]

Hasil:

[1 3 5 7 9]

19. Indexing Negatif

NumPy juga mendukung negative indexing.

Contoh:

numbers = np.array([
10, 20, 30, 40, 50
])

Elemen terakhir:

numbers[-1]

hasil:

50

Elemen kedua dari belakang:

numbers[-2]

hasil:

40

Negative indexing dapat digunakan pada array multidimensi.

Contoh:

A2[-1]

akan mengambil baris terakhir.

Sedangkan:

A2[:, -1]

akan mengambil kolom terakhir.


20. Perbedaan Indexing dan Slicing

Indexing dan slicing memiliki tujuan yang berbeda.

TeknikTujuan
IndexingMengambil elemen atau bagian tertentu berdasarkan posisi
SlicingMengambil rentang atau subset data

Contoh indexing:

numbers[2]

mengambil satu elemen.

Contoh slicing:

numbers[1:4]

mengambil beberapa elemen.

Secara sederhana:

Indexing

Ambil data tertentu

Slicing

Ambil sebagian data

21. Memeriksa .shape dan .ndim

Sebelum melakukan indexing atau slicing yang kompleks, biasakan memeriksa:

A4.shape

dan:

A4.ndim

Misalnya:

print(A4.shape)
print(A4.ndim)

Output:

(2, 3, 4, 5)
4

Dari informasi tersebut kita mengetahui bahwa:

  • Array memiliki 4 dimensi.
  • Dimensi pertama berukuran 2.
  • Dimensi kedua berukuran 3.
  • Dimensi ketiga berukuran 4.
  • Dimensi keempat berukuran 5.

Informasi ini membantu kita menentukan berapa banyak index yang dibutuhkan.


22. Error: Too Many Indices

Salah satu error yang mungkin muncul ketika melakukan indexing adalah:

IndexError: too many indices for array

Contohnya kita memiliki array 1D:

A1 = np.array([1, 2, 3])

Kemudian mencoba:

A1[0, 1]

Ini salah karena A1 hanya memiliki satu dimensi.

Kita hanya dapat menggunakan satu index:

A1[0]

Untuk menghindari masalah seperti ini, periksa terlebih dahulu:

A1.ndim

dan:

A1.shape

23. Praktik: Membuat dan Memeriksa Array

Berikut contoh latihan sederhana:

import numpy as np

np.random.seed(0)

A = np.random.randint(
0,
10,
size=(5, 3)
)

print("Array:")
print(A)

print("\nShape:")
print(A.shape)

print("\nDimensions:")
print(A.ndim)

print("\nUnique values:")
print(np.unique(A))

Kode tersebut melakukan beberapa langkah:

Membuat array

Memeriksa shape

Memeriksa dimensi

Mencari nilai unik

24. Praktik Indexing

Gunakan array berikut:

A = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

Cobalah menjalankan:

A[0]

Kemudian:

A[1]

Kemudian:

A[0, 1]

Dan:

A[2, 2]

Perhatikan bagaimana perubahan index memengaruhi data yang diambil.


25. Praktik Slicing

Dengan array yang sama:

A = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])

Cobalah:

A[:2]

Kemudian:

A[:, :2]

Dan:

A[:2, :2]

Bandingkan hasil masing-masing operasi.

Latihan seperti ini akan membantu memahami bagaimana slicing bekerja pada array multidimensi.


26. Tips Belajar dengan Jupyter Notebook

Ketika lupa cara menggunakan sebuah fungsi NumPy, kita dapat menggunakan bantuan dokumentasi di Jupyter Notebook.

Misalnya:

np.unique(

Letakkan kursor di dalam tanda kurung kemudian tekan:

Shift + Tab

Jupyter akan menampilkan informasi mengenai fungsi tersebut.

Kebiasaan ini sangat berguna ketika kita belum hafal:

  • nama parameter,
  • urutan parameter,
  • fungsi yang tersedia,
  • dan cara menggunakan sebuah method atau function.

27. Best Practice saat Indexing dan Slicing

Beberapa kebiasaan yang baik ketika bekerja dengan NumPy:

Periksa Shape

Selalu periksa:

array.shape

sebelum melakukan operasi multidimensi yang kompleks.

Periksa Dimensi

Gunakan:

array.ndim

untuk mengetahui berapa dimensi yang tersedia.

Mulai dari Contoh Sederhana

Sebelum menggunakan array 4D, pahami terlebih dahulu:

1D → 2D → 3D → 4D

Gunakan Print untuk Memeriksa Hasil

Contoh:

print(array)
print(array.shape)

Dengan demikian kita dapat melihat apakah operasi yang dilakukan menghasilkan data sesuai harapan.


28. Ringkasan

Pada materi ini kita telah mempelajari bagaimana melihat dan mengambil data dari NumPy array.

Konsep utama yang perlu dipahami:

np.unique()

Digunakan untuk mendapatkan nilai unik dari array.

np.unique(array)

Indexing

Digunakan untuk mengambil elemen atau bagian tertentu berdasarkan index.

array[index]

Untuk array 2D:

array[row, column]

Untuk array 3D:

array[index_1, index_2, index_3]

Slicing

Digunakan untuk mengambil sebagian data.

array[start:stop]

Pada multidimensi:

array[start:stop, start:stop]

Shape dan Dimensi

Sebelum melakukan indexing dan slicing, pahami:

array.shape

dan:

array.ndim

Dengan memahami kedua informasi tersebut, kita dapat menentukan struktur array dan jumlah index yang dibutuhkan.


Checklist

Sebelum melanjutkan ke materi berikutnya, pastikan Anda sudah memahami:

  • Fungsi np.unique().
  • Cara mendapatkan nilai unik dari array.
  • Perbedaan vector dan matrix.
  • Apa yang dimaksud dengan ndarray.
  • Konsep zero-based indexing.
  • Cara melakukan indexing pada array 1D.
  • Cara melakukan indexing pada array 2D.
  • Cara melakukan indexing pada array 3D.
  • Cara melakukan slicing pada array.
  • Cara melakukan slicing pada array multidimensi.
  • Cara menggunakan negative indexing.
  • Cara menggunakan step pada slicing.
  • Cara membaca .shape.
  • Cara menggunakan .ndim.
  • Mengapa memahami shape penting sebelum indexing.
  • Penyebab error too many indices for array.
  • Cara menggunakan Shift + Tab untuk melihat dokumentasi di Jupyter Notebook.