Filter data adalah pekerjaan sehari-hari di NumPy: ambil nilai ujian di atas 60, hitung transaksi yang gagal, tandai stok yang menipis. Semua pekerjaan itu bertumpu pada tipe data bool, tipe paling sederhana di NumPy yang hanya menampung dua nilai, True dan False, dan cukup 1 byte per elemen. Bab ini membahas cara array bool terbentuk, sifat aritmetikanya, dan konversinya dari serta ke tipe angka.
Membentuk Array bool #
Ada dua cara utama mendapatkan array bertipe bool: menuliskannya langsung dari list Python, atau membiarkan operasi perbandingan menghasilkannya. Cara kedua jauh lebih sering dipakai karena hasil perbandingan array NumPy otomatis menjadi array bool yang disebut mask.
import numpy as np
status = np.array([True, False, True, True])
print(status.dtype)
nilai = np.array([75, 40, 88, 59])
lulus = nilai >= 60
print(lulus)
print(lulus.dtype)Output yang Dihasilkan:
bool
[ True False True False]
boolMari kita telaah blok di atas:
- Baris 3 (
np.array([True, False, True, True])): NumPy mengenali list berisiTrue/FalsePython dan menyimpannya sebagai array dengan dtypebool, bukan sebagai objek Python. - Baris 6 (
nilai >= 60): perbandingan dieksekusi elemen per elemen secara vectorized; interpreter tidak membuat list baru satu per satu, melainkan membandingkan seluruh elemen dalam satu operasi C. - Baris 7 (
lulus = ...): variabelluluskini menampung mask dengan panjang yang sama persis dengannilai; posisiTruemenandai elemen yang memenuhi syarat.
Perhatikan penulisannya: True dan False memakai huruf kapital di awal karena keduanya adalah konstanta bawaan Python. Mask bisa dibangun dari banyak operator perbandingan dan fungsi logika:
nilai > 60,nilai >= 60,nilai == 40untuk perbandingan langsung.np.isin(nilai, [40, 59])untuk keanggotaan pada kumpulan nilai.np.isnan(data)untuk mendeteksi elemennp.nanpada data float.&(dan),|(atau),~(tidak) untuk menggabungkan mask; hindariand/orPython karena keduanya tidak bekerja elemen per elemen.
bool sebagai 0 dan 1 #
Di balik layar, True disimpan sebagai angka 1 dan False sebagai angka 0. Sifat ini membuat array bool bisa langsung dijumlahkan dan dirata-rata tanpa konversi apa pun. mask.sum() menghitung banyaknya True, sedangkan mask.mean() memberi proporsi True dalam bentuk pecahan.
import numpy as np
nilai = np.array([75, 40, 88, 59])
lulus = nilai >= 60
print(lulus.sum())
print(lulus.mean())Output yang Dihasilkan:
2
0.5Interpretasinya: dua siswa lulus, dan lulus.mean() menghasilkan 0.5 karena 2 dari 4 elemen bernilai True. Pola mask.mean() ini cara paling ringkas untuk menjawab pertanyaan sejenis “berapa persen data yang memenuhi syarat”.
Konversi antara bool dan Angka #
Konversi dua arah antara angka dan bool mengikuti satu aturan yang konsisten: angka nol menjadi False, semua angka selain nol menjadi True. Arah sebaliknya juga lurus, karena True menjadi 1 dan False menjadi 0.
import numpy as np
data = np.array([1, 0, 7, 0, 3])
print(data.astype(bool))
flag = np.array([True, False, True])
print(flag.astype(np.int32))
print(flag.astype(np.int32).sum())Output yang Dihasilkan:
[ True False True False True]
[1 0 1]
2Penjelasan baris penting:
- Baris 3-4 (
data.astype(bool)): nilai0dikonversi menjadiFalse; nilai lainnya, termasuk7dan3, menjadiTrue. - Baris 7 (
flag.astype(np.int32)): array bool berubah menjadi array integer berisi1dan0. - Baris 8 (
.sum()): setelah menjadi integer, penjumlahan menghasilkan 2, angka yang sama denganflag.sum()sebelum konversi.
Jembatan ke Boolean Indexing #
Array bool bukan sekadar penanda; ia adalah bahan baku boolean indexing, teknik memilih elemen array memakai mask. Baris nilai[lulus] akan mengembalikan hanya elemen yang posisinya bertanda True, yaitu array([75, 88]). Teknik lengkapnya, termasuk penggabungan mask multikriteria, akan dibahas lebih lanjut pada Chapter Boolean Indexing.