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.

python
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:

text
bool
[ True False  True False]
bool

Mari kita telaah blok di atas:

  1. Baris 3 (np.array([True, False, True, True])): NumPy mengenali list berisi True/False Python dan menyimpannya sebagai array dengan dtype bool, bukan sebagai objek Python.
  2. 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.
  3. Baris 7 (lulus = ...): variabel lulus kini menampung mask dengan panjang yang sama persis dengan nilai; posisi True menandai 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 == 40 untuk perbandingan langsung.
  • np.isin(nilai, [40, 59]) untuk keanggotaan pada kumpulan nilai.
  • np.isnan(data) untuk mendeteksi elemen np.nan pada data float.
  • & (dan), | (atau), ~ (tidak) untuk menggabungkan mask; hindari and/or Python 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.

python
import numpy as np

nilai = np.array([75, 40, 88, 59])
lulus = nilai >= 60
print(lulus.sum())
print(lulus.mean())

Output yang Dihasilkan:

text
2
0.5

Interpretasinya: 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.

python
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:

text
[ True False  True False  True]
[1 0 1]
2

Penjelasan baris penting:

  1. Baris 3-4 (data.astype(bool)): nilai 0 dikonversi menjadi False; nilai lainnya, termasuk 7 dan 3, menjadi True.
  2. Baris 7 (flag.astype(np.int32)): array bool berubah menjadi array integer berisi 1 dan 0.
  3. Baris 8 (.sum()): setelah menjadi integer, penjumlahan menghasilkan 2, angka yang sama dengan flag.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.