Pertanyaan analisis paling awal biasanya tentang ekstrem: produk mana dengan penjualan tertinggi, nilai ujian mana yang terendah, atau di posisi berapa nilai itu berada. NumPy menjawab keduanya dengan empat fungsi yang berpasangan: min dan max mengembalikan nilai ekstrem, sedangkan argmin dan argmax mengembalikan posisi indeks ekstrem tersebut.
Perbedaan nilai versus posisi ini adalah inti bab. Kita juga akan melihat jebakan klasik argmin/argmax pada array dua dimensi dan cara membaca hasilnya dengan axis.
Nilai Terkecil dan Terbesar dengan min dan max #
import numpy as np
nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
print(nilai.min(), nilai.max())
print(np.min(nilai), np.max(nilai))Output yang Dihasilkan:
69 95
69 95Kedua baris menghasilkan output yang identik. Gaya method .min() dan .max() hanya tersedia pada objek ndarray, sedangkan gaya fungsi np.min dan np.max juga menerima list Python sebelum mengonversinya menjadi array. Pilih satu gaya dan konsisten; di seluruh course ini keduanya dipakai sesuai konteks.
argmin dan argmax: Posisi, Bukan Nilai #
argmin dan argmax menjawab pertanyaan “di indeks ke berapa”, bukan “berapa nilainya”. Nilainya baru kita peroleh setelah indeks tersebut dipakai untuk indexing:
import numpy as np
nilai = np.array([78, 85, 92, 69, 88, 95, 73, 81])
indeks_min = nilai.argmin()
indeks_max = nilai.argmax()
print(indeks_min, indeks_max)
print(nilai[indeks_min], nilai[indeks_max])Output yang Dihasilkan:
3 5
69 95Bedah baris demi baris:
- Baris 3 (
nilai.argmin()): fungsi ini memindai array dan mengembalikan indeks kemunculan pertama dari nilai terkecil, yaitu3karenanilai[3] == 69. - Baris 4 (
nilai.argmax()): pola yang sama untuk nilai terbesar, yang berada di indeks5. - Baris 6 (
print(...)): indeks hasilargmin/argmaxdipakai untuk mengambil nilainya,69dan95, membuktikan bahwa keduanya memang menunjuk nilai ekstrem yang benar.
Kalau ada dua nilai yang sama-sama terbesar, argmax tetap mengembalikan satu indeks saja: kemunculan pertamanya. Tabel berikut merangkum peran keempat fungsi:
| Fungsi | Pertanyaan yang dijawab | Hasil pada nilai |
|---|---|---|
nilai.min() | Berapa nilai terkecil? | 69 |
nilai.argmin() | Di indeks ke berapa nilai terkecil? | 3 |
nilai.max() | Berapa nilai terbesar? | 95 |
nilai.argmax() | Di indeks ke berapa nilai terbesar? | 5 |
Jebakan Indeks Flat pada Array Dua Dimensi #
Tanpa axis, argmin dan argmax memperlakukan array dua dimensi sebagai satu deret panjang yang dilipat baris demi baris, lalu mengembalikan indeks pada deret itu — disebut indeks flat:
import numpy as np
penjualan = np.array([
[120, 85, 200, 65],
[90, 150, 110, 40],
[175, 60, 95, 130],
])
print(penjualan.min(), penjualan.max())
print(penjualan.argmin(), penjualan.argmax())
print(np.unravel_index(penjualan.argmin(), penjualan.shape))
print(np.unravel_index(penjualan.argmax(), penjualan.shape))Output yang Dihasilkan:
40 200
7 2
(np.int64(1), np.int64(3))
(np.int64(0), np.int64(2))Bedah baris demi baris:
- Baris 8 (
penjualan.min(), penjualan.max()): tanpaaxis, nilai ekstrem dicari dari seluruh 12 sel sekaligus: terkecil40, terbesar200. - Baris 9 (
penjualan.argmin(), penjualan.argmax()): hasilnya indeks flat7dan2, bukan pasangan (baris, kolom). Nilai40berada di baris 1 kolom 3, dan 1 x 4 + 3 =7; nilai200berada di baris 0 kolom 2, dan 0 x 4 + 2 =2. - Baris 10-11 (
np.unravel_index(...)): fungsi ini mengubah indeks flat menjadi pasangan (baris, kolom) sesuai shape array,(1, 3)untuk40dan(0, 2)untuk200. Tampilannp.int64(1)adalah gaya cetak NumPy 2.x untuk scalar integer di dalam tuple; nilainya tetap1dan3.
Kalau kebutuhannya bukan satu posisi ekstrem melainkan semua elemen yang memenuhi syarat (misalnya semua produk dengan penjualan di atas 100), alat yang tepat adalah perbandingan array dan boolean indexing pada Chapter Boolean Indexing.
Mencari Ekstrem per Baris atau per Kolom #
Dengan parameter axis, pencarian ekstrem diarahkan per baris atau per kolom — aturannya sama seperti pada sum:
import numpy as np
penjualan = np.array([
[120, 85, 200, 65],
[90, 150, 110, 40],
[175, 60, 95, 130],
])
print(penjualan.max(axis=1))
print(penjualan.argmax(axis=1))
print(penjualan.min(axis=0))Output yang Dihasilkan:
[200 150 175]
[2 1 0]
[90 60 95 40]max(axis=1) menghasilkan produk terlaris di tiap cabang: [200 150 175]. Pasangannya argmax(axis=1) memberi posisi produk tersebut per cabang: [2 1 0], artinya cabang pertama paling laku menjual produk indeks 2, cabang kedua produk indeks 1, dan cabang ketiga produk indeks 0. Sementara min(axis=0) melipat baris dan mencari penjualan terendah tiap produk antar cabang: [90 60 95 40].
Detail cara kerja axis — termasuk cara menurunkan bentuk hasilnya secara sistematis — kita bedah tuntas pada Chapter Operasi Berdasarkan Axis.