Sorting Arrays
Selain melakukan operasi matematika dan perbandingan data, NumPy juga menyediakan berbagai fungsi untuk mengurutkan array dan mencari posisi atau indeks elemen tertentu.
Beberapa fungsi yang penting untuk dipahami adalah:
| Fungsi | Kegunaan |
|---|---|
np.sort() | Mengurutkan nilai dalam array |
np.argsort() | Mendapatkan indeks yang menghasilkan urutan |
np.argmin() | Mendapatkan indeks dari nilai minimum |
np.argmax() | Mendapatkan indeks dari nilai maksimum |
Fungsi-fungsi tersebut banyak digunakan dalam Data Science dan Machine Learning, misalnya untuk mencari nilai terbesar, menentukan ranking, atau mengetahui posisi data tertentu.
Persiapan Data
Kita akan membuat sebuah array acak dengan ukuran 3 baris × 5 kolom.
Gunakan np.random.randint() untuk menghasilkan bilangan bulat secara acak dari 0 sampai 9.
import numpy as np
random_array = np.random.randint(10, size=(3, 5))
print(random_array)
Contoh hasil:
[[5 3 8 1 7]
[2 9 4 6 0]
[8 1 5 3 2]]
Perlu diperhatikan bahwa hasil angka akan berbeda setiap kali program dijalankan karena array dibuat secara acak.
Untuk memastikan hasil yang sama setiap kali program dijalankan, kita dapat menggunakan random seed.
np.random.seed(42)
random_array = np.random.randint(10, size=(3, 5))
print(random_array)
Mengurutkan Array dengan np.sort()
Fungsi np.sort() digunakan untuk mengurutkan nilai dalam array.
np.sort(random_array)
Contoh:
[[1 3 5 7 8]
[0 2 4 6 9]
[1 2 3 5 8]]
Pada array 2D, secara default NumPy mengurutkan elemen pada setiap baris.
Misalnya:
Sebelum:
[5 3 8 1 7]
Sesudah:
[1 3 5 7 8]
Setiap baris diurutkan secara independen.
np.sort() Tidak Mengubah Array Asli
Salah satu hal penting adalah np.sort() mengembalikan array yang sudah diurutkan tanpa mengubah array asli.
random_array = np.array([5, 3, 8, 1, 7])
sorted_array = np.sort(random_array)
print("Array asli :", random_array)
print("Sorted :", sorted_array)
Output:
Array asli : [5 3 8 1 7]
Sorted : [1 3 5 7 8]
Jika kita memang ingin mengubah array asli, hasilnya dapat diberikan kembali ke variabel:
random_array = np.sort(random_array)
Mengatur Arah Pengurutan dengan axis
Secara default, np.sort() menggunakan axis=-1.
Artinya, pada array 2D, pengurutan dilakukan sepanjang dimensi terakhir, yaitu setiap baris.
Kita juga dapat menentukan axis secara eksplisit.
axis=1
Untuk array 2D, axis=1 mengurutkan nilai pada setiap baris.
np.sort(random_array, axis=1)
Contoh:
[[5 3 8 1 7]
[2 9 4 6 0]
[8 1 5 3 2]]
menjadi:
[[1 3 5 7 8]
[0 2 4 6 9]
[1 2 3 5 8]]
axis=0
axis=0 mengurutkan nilai sepanjang dimensi pertama.
Pada array 2D, secara praktis kita dapat melihatnya sebagai pengurutan di setiap kolom.
np.sort(random_array, axis=0)
Contoh:
[[5 3 8 1 7]
[2 9 4 6 0]
[8 1 5 3 2]]
menjadi:
[[2 1 4 1 0]
[5 3 5 3 2]
[8 9 8 6 7]]
Pemahaman axis menjadi semakin penting ketika bekerja dengan array multidimensi.
Mendapatkan Indeks dengan np.argsort()
Terkadang kita tidak hanya membutuhkan nilai yang sudah diurutkan.
Kita mungkin ingin mengetahui:
"Elemen pada posisi mana yang harus diambil agar array menjadi terurut?"
Untuk kebutuhan tersebut kita dapat menggunakan np.argsort().
a1 = np.array([5, 3, 8, 1, 7])
np.argsort(a1)
Output:
[3 1 0 4 2]
Mari kita perhatikan:
Index : 0 1 2 3 4
Value : 5 3 8 1 7
Urutan nilai dari terkecil ke terbesar adalah:
1 → 3 → 5 → 7 → 8
Posisi masing-masing nilai tersebut adalah:
1 → index 3
3 → index 1
5 → index 0
7 → index 4
8 → index 2
Sehingga:
np.argsort(a1)
[3 1 0 4 2]
Menggunakan Hasil argsort() untuk Mengurutkan Data
Hasil argsort() dapat digunakan sebagai indeks untuk mengambil data.
sorted_indices = np.argsort(a1)
print(a1[sorted_indices])
Output:
[1 3 5 7 8]
Secara konsep:
argsort()
↓
[3, 1, 0, 4, 2]
↓
digunakan sebagai indeks
↓
[1, 3, 5, 7, 8]
Perbedaan utama:
| Fungsi | Hasil |
|---|---|
np.sort() | Nilai yang sudah diurutkan |
np.argsort() | Indeks yang menghasilkan urutan |
np.argmin() untuk Mencari Indeks Minimum
Fungsi np.argmin() digunakan untuk mencari indeks dari nilai terkecil.
Contoh:
a1 = np.array([1, 2, 3])
np.argmin(a1)
Output:
0
Karena:
Index : 0 1 2
Value : 1 2 3
Nilai terkecil adalah 1, dan nilai tersebut berada pada indeks 0.
Contoh lain:
a1 = np.array([10, 5, 20, 2, 15])
print(np.argmin(a1))
Output:
3
Karena nilai minimum adalah 2 dan berada pada indeks 3.
Jika yang dibutuhkan adalah nilai minimumnya, gunakan:
np.min(a1)
Jadi:
np.argmin(a1)
menghasilkan indeks, sedangkan:
np.min(a1)
menghasilkan nilai.
np.argmax() untuk Mencari Indeks Maksimum
Kebalikan dari np.argmin(), fungsi np.argmax() digunakan untuk mencari indeks dari nilai terbesar.
a1 = np.array([1, 2, 3])
np.argmax(a1)
Output:
2
Karena nilai terbesar adalah 3 dan berada pada indeks 2.
Contoh lain:
a1 = np.array([10, 5, 20, 2, 15])
print(np.argmax(a1))
Output:
2
Karena nilai maksimum adalah 20 dan berada pada indeks 2.
Jika yang dibutuhkan adalah nilai maksimumnya:
np.max(a1)
Perbedaannya:
| Fungsi | Hasil |
|---|---|
np.argmax() | Indeks nilai maksimum |
np.max() | Nilai maksimum |
np.argmin() | Indeks nilai minimum |
np.min() | Nilai minimum |
argmin() dan argmax() pada Array 2D
Fungsi np.argmin() dan np.argmax() juga dapat digunakan pada array 2D.
Contoh:
random_array = np.array([
[5, 3, 8, 1, 7],
[2, 9, 4, 6, 0],
[8, 1, 5, 3, 2]
])
print(random_array)
Hasil:
[[5 3 8 1 7]
[2 9 4 6 0]
[8 1 5 3 2]]
Tanpa Menentukan axis
Jika axis tidak ditentukan, NumPy akan memperlakukan array sebagai array yang diratakan (flattened) untuk operasi tersebut.
np.argmax(random_array)
Hasilnya adalah satu indeks pada array yang telah diratakan.
Untuk melihat prosesnya:
random_array.flatten()
Hasil:
[5 3 8 1 7 2 9 4 6 0 8 1 5 3 2]
Nilai maksimum adalah 9.
Nilai tersebut berada pada posisi:
6
Sehingga:
np.argmax(random_array)
menghasilkan:
6
Jika kita membutuhkan koordinat baris dan kolom, kita dapat menggunakan np.unravel_index():
np.unravel_index(np.argmax(random_array), random_array.shape)
Hasil:
(1, 1)
Artinya nilai maksimum berada pada:
baris 1
kolom 1
argmax() dengan axis=0
Kita dapat menentukan axis untuk mencari posisi nilai maksimum pada dimensi tertentu.
np.argmax(random_array, axis=0)
Untuk array:
[[5, 3, 8, 1, 7],
[2, 9, 4, 6, 0],
[8, 1, 5, 3, 2]]
hasilnya menunjukkan indeks baris yang memiliki nilai maksimum pada masing-masing kolom.
Misalnya:
Kolom 0:
5
2
8
Nilai maksimum adalah 8, yang berada pada indeks baris 2.
Dengan demikian, hasil argmax(axis=0) berisi indeks baris untuk setiap kolom.
np.argmax(random_array, axis=0)
Contoh hasil:
[2 1 0 1 0]
argmax() dengan axis=1
Jika menggunakan:
np.argmax(random_array, axis=1)
maka NumPy mencari indeks nilai maksimum pada setiap baris.
Contoh:
Baris 0:
[5, 3, 8, 1, 7]
Nilai maksimum adalah 8, yang berada pada indeks 2.
Baris 1:
[2, 9, 4, 6, 0]
Nilai maksimum adalah 9, yang berada pada indeks 1.
Baris 2:
[8, 1, 5, 3, 2]
Nilai maksimum adalah 8, yang berada pada indeks 0.
Sehingga:
np.argmax(random_array, axis=1)
menghasilkan:
[2 1 0]
Hasil tersebut berarti:
Baris 0 → maksimum pada index 2
Baris 1 → maksimum pada index 1
Baris 2 → maksimum pada index 0
argmin() dengan axis
Konsep yang sama berlaku untuk np.argmin().
Untuk mencari indeks nilai minimum pada setiap kolom:
np.argmin(random_array, axis=0)
Sedangkan untuk mencari indeks nilai minimum pada setiap baris:
np.argmin(random_array, axis=1)
Jadi:
axis=0
→ cari posisi minimum/maksimum sepanjang kolom
→ hasil menunjukkan indeks baris
axis=1
→ cari posisi minimum/maksimum sepanjang baris
→ hasil menunjukkan indeks kolom
Cara memahami axis sebaiknya dikaitkan dengan dimensi yang digunakan untuk melakukan operasi, bukan hanya menghafalkan "axis 0 adalah baris" atau "axis 1 adalah kolom".
Perbandingan sort, argsort, argmin, dan argmax
Keempat fungsi ini memiliki tujuan yang berbeda.
| Fungsi | Pertanyaan yang Dijawab | Hasil |
|---|---|---|
np.sort() | Bagaimana nilai ini jika diurutkan? | Nilai terurut |
np.argsort() | Indeks mana yang menghasilkan urutan tersebut? | Indeks |
np.argmin() | Di mana posisi nilai terkecil? | Indeks |
np.argmax() | Di mana posisi nilai terbesar? | Indeks |
Contoh:
a1 = np.array([50, 20, 80, 10, 40])
Mengurutkan Nilai
np.sort(a1)
Hasil:
[10 20 40 50 80]
Mendapatkan Indeks Pengurutan
np.argsort(a1)
Hasil:
[3 1 4 0 2]
Mencari Indeks Minimum
np.argmin(a1)
Hasil:
3
Mencari Indeks Maksimum
np.argmax(a1)
Hasil:
2
Contoh Penggunaan dalam Data Science
Fungsi-fungsi tersebut sangat berguna ketika bekerja dengan data nyata.
Misalnya kita memiliki skor beberapa siswa:
scores = np.array([78, 92, 85, 96, 88])
Mencari skor tertinggi:
scores.max()
Hasil:
96
Mencari posisi siswa dengan skor tertinggi:
scores.argmax()
Hasil:
3
Mencari skor terendah:
scores.min()
Hasil:
78
Mencari posisi siswa dengan skor terendah:
scores.argmin()
Hasil:
0
Mendapatkan urutan siswa berdasarkan skor dari terendah ke tertinggi:
scores.argsort()
Hasil:
[0 2 4 1 3]
Sedangkan nilai yang sudah diurutkan:
np.sort(scores)
Hasil:
[78 85 88 92 96]
Contoh Penggunaan untuk Ranking
Misalnya terdapat data skor model Machine Learning:
model_scores = np.array([
0.82,
0.91,
0.87,
0.95,
0.89
])
Kita dapat mengetahui model dengan performa terbaik:
best_model_index = np.argmax(model_scores)
print(best_model_index)
Hasil:
3
Nilainya:
model_scores[best_model_index]
Hasil:
0.95
Kita juga dapat mendapatkan ranking berdasarkan skor:
ranking = np.argsort(model_scores)[::-1]
print(ranking)
Operator [::-1] digunakan untuk membalik urutan sehingga ranking dimulai dari skor terbesar.
Hasil:
[3 1 4 2 0]
Dengan demikian:
Ranking 1 → index 3 → 0.95
Ranking 2 → index 1 → 0.91
Ranking 3 → index 4 → 0.89
Ranking 4 → index 2 → 0.87
Ranking 5 → index 0 → 0.82
Teknik seperti ini sering digunakan ketika kita ingin mendapatkan Top-N data berdasarkan suatu skor.
Hal yang Perlu Diperhatikan
sort() Berbeda dengan argsort()
Jangan tertukar antara:
np.sort(a1)
dan:
np.argsort(a1)
Yang pertama memberikan nilai yang sudah diurutkan, sedangkan yang kedua memberikan indeksnya.
argmax() dan argmin() Menghasilkan Indeks
Perhatikan bahwa:
np.argmax(a1)
tidak menghasilkan nilai maksimum.
Untuk nilai maksimum gunakan:
np.max(a1)
Begitu juga:
np.argmin(a1)
menghasilkan indeks minimum, sedangkan:
np.min(a1)
menghasilkan nilai minimum.
Hasil argmax() dengan Nilai Duplikat
Jika terdapat beberapa nilai yang sama-sama merupakan nilai maksimum, np.argmax() akan mengembalikan indeks kemunculan pertama.
Contoh:
a1 = np.array([10, 20, 30, 30, 15])
np.argmax(a1)
Hasil:
2
Meskipun nilai 30 juga terdapat pada indeks 3, yang dikembalikan adalah indeks pertama.
Workflow Sorting dan Searching pada NumPy
Secara umum, kita dapat menggunakan fungsi-fungsi tersebut dengan alur berikut:
Data
↓
NumPy Array
↓
Identifikasi kebutuhan
↓
┌───────────────────────────────┐
│ Ingin mengurutkan nilai? │
│ → np.sort() │
│ │
│ Ingin indeks urutan? │
│ → np.argsort() │
│ │
│ Ingin posisi nilai minimum? │
│ → np.argmin() │
│ │
│ Ingin posisi nilai maksimum? │
│ → np.argmax() │
└───────────────────────────────┘
↓
Gunakan hasil untuk analisis
Ringkasan
NumPy menyediakan fungsi yang sangat berguna untuk melakukan sorting dan pencarian posisi data.
np.sort()
Digunakan untuk mengurutkan nilai array.
np.sort(a1)
Menghasilkan nilai yang sudah diurutkan.
np.argsort()
Digunakan untuk mendapatkan indeks yang menghasilkan urutan tertentu.
np.argsort(a1)
Menghasilkan array indeks.
np.argmin()
Digunakan untuk mendapatkan indeks dari nilai minimum.
np.argmin(a1)
np.argmax()
Digunakan untuk mendapatkan indeks dari nilai maksimum.
np.argmax(a1)
Konsep Utama
sort
→ nilai terurut
argsort
→ indeks untuk menghasilkan urutan
argmin
→ indeks nilai minimum
argmax
→ indeks nilai maksimum
Checklist Pembelajaran
Setelah mempelajari materi ini, Anda seharusnya dapat:
- Menggunakan
np.sort()untuk mengurutkan array. - Memahami perbedaan
np.sort()dannp.argsort(). - Menggunakan
np.argsort()untuk mendapatkan indeks berdasarkan urutan nilai. - Menggunakan
np.argmin()untuk mencari posisi nilai minimum. - Menggunakan
np.argmax()untuk mencari posisi nilai maksimum. - Menggunakan
axispadaargmin(),argmax(), dansort(). - Memahami perbedaan hasil
axis=0danaxis=1pada array 2D. - Menggunakan hasil
argsort()untuk membuat ranking. - Menggunakan
argmax()untuk menemukan data dengan skor tertinggi.
Latihan
Latihan 1 — Sorting
Buat array berikut:
numbers = np.array([45, 12, 78, 23, 90, 34])
Kemudian:
- Urutkan array dari terkecil ke terbesar.
- Dapatkan indeks yang menghasilkan urutan tersebut.
- Cari indeks nilai minimum.
- Cari indeks nilai maksimum.
Latihan 2 — Ranking
Gunakan data berikut:
scores = np.array([0.81, 0.95, 0.88, 0.79, 0.92])
Cari:
- Model dengan skor tertinggi.
- Indeks model dengan skor tertinggi.
- Urutan model dari skor tertinggi ke terendah.
- Tiga model dengan skor terbaik.
Latihan 3 — Array 2D
Buat array:
data = np.array([
[10, 50, 30],
[40, 20, 60],
[70, 80, 90]
])
Kemudian cari:
- Nilai maksimum seluruh array.
- Indeks maksimum seluruh array.
- Indeks maksimum setiap kolom.
- Indeks maksimum setiap baris.
- Indeks minimum setiap kolom.
- Indeks minimum setiap baris.