Bentuk angka acak yang paling sering dibutuhkan adalah bilangan bulat: lemparan dadu bernilai 1 sampai 6, nomor undian, indeks sampel yang diambil dari dataset, atau stok acak pada simulasi gudang. Method utama untuk kebutuhan itu adalah rng.integers.
Bab ini membahas cara kerja integers beserta parameter size dan endpoint, lalu melangkah ke sampling — mengambil sebagian anggota dari kumpulan data, baik dengan pengembalian (with replacement, anggota boleh terpilih berulang) maupun tanpa pengembalian (without replacement, setiap anggota paling banyak terpilih sekali).
Method integers: Batas Rentang #
rng.integers(low, high, size) menghasilkan bilangan bulat acak mulai dari low hingga high - 1. Perhatikan: batas atas high bersifat eksklusif. Untuk mensimulasikan lemparan dadu bernilai 1 sampai 6, kita menulis integers(1, 7):
import numpy as np
rng = np.random.default_rng(42)
print(rng.integers(1, 7, size=5))
undian = rng.integers(0, 10)
print(undian)
print(type(undian))Output yang Dihasilkan:
[1 5 4 3 3]
8
<class 'numpy.int64'>Bedah baris demi baris:
- Baris 4 (
rng.integers(1, 7, size=5)): lima bilangan bulat pada rentang1sampai6— persis enam sisi dadu. Nilai7tidak pernah muncul karenahigheksklusif. - Baris 5 (
rng.integers(0, 10)): tanpa argumensize, method mengembalikan satu nilai tunggal — di sini8, seolah mengundi satu nomor 0 sampai 9. - Baris 6-7: nilai tunggal tersebut bertipe
numpy.int64, bukanintbawaan Python — konsisten dengan elemen array NumPy.
Parameter endpoint: Memasukkan Batas Atas #
Batas atas dapat diikutkan dengan endpoint=True. Agar perbandingannya adil, contoh berikut memakai seed yang sama dua kali sehingga kedua generator menarik dari urutan dasar yang identik:
import numpy as np
rng = np.random.default_rng(7)
print(rng.integers(1, 6, size=5))
rng = np.random.default_rng(7)
print(rng.integers(1, 6, endpoint=True, size=5))Output yang Dihasilkan:
[5 4 4 5 3]
[6 4 5 6 4]Tarikan dasarnya sama, tetapi pemetaan rentangnya berbeda — setiap nilai bergeser satu tingkat karena batas atas kini ikut dilibatkan:
| Pemanggilan | Rentang hasil | Hasil pada contoh |
|---|---|---|
integers(1, 6) | 1 sampai 5 | [5 4 4 5 3] |
integers(1, 6, endpoint=True) | 1 sampai 6 | [6 4 5 6 4] |
size Berupa Tuple: Array Multi-dimensi #
Argumen size menerima bilangan bulat maupun tuple. Tuple menghasilkan array multi-dimensi sekaligus:
import numpy as np
rng = np.random.default_rng(42)
nilai = rng.integers(60, 101, size=(2, 3))
print(nilai)
print(nilai.shape)Output yang Dihasilkan:
[[63 91 86]
[77 77 95]]
(2, 3)Baris 4 menarik enam nilai acak (2 x 3) pada rentang 60 sampai 100 — misalnya nilai ujian untuk dua kelas berisi tiga siswa. Karena high eksklusif, angka 101 hanya berperan sebagai pembatas; nilai tertinggi yang mungkin adalah 100. Bentuk nilai.shape mengikuti tuple yang diberikan, sehingga hasilnya langsung siap dipakai dalam perhitungan array seperti pada section sebelumnya.
Sampling dengan Pengembalian #
Cara pertama melakukan sampling with replacement adalah menarik indeks acak dengan integers, lalu mengambil data pada indeks tersebut. Anggota yang sama boleh terpilih berkali-kali — seperti mengundi nomor yang dikembalikan lagi ke wadah:
import numpy as np
data = np.array([12, 7, 9, 15, 11])
rng = np.random.default_rng(42)
indeks = rng.integers(0, data.size, size=5)
print(indeks)
print(data[indeks])Output yang Dihasilkan:
[0 3 3 2 2]
[12 15 15 9 9]Bedah baris demi baris:
- Baris 4: generator ber-seed
42menyiapkan urutan yang dapat direproduksi. - Baris 5 (
rng.integers(0, data.size, size=5)): lima indeks acak dari rentang0sampai4(data.sizebernilai 5 dan bersifat eksklusif sebagai batas atas). - Baris 7 (
data[indeks]): elemen diambil pada indeks-indeks tersebut — teknik fancy indexing yang dibahas pada Chapter Fancy Indexing.
Perhatikan indeks 3 dan 2 masing-masing muncul dua kali, sehingga hasilnya memuat nilai berulang: 15 dan 9. Pola “tarik indeks, ambil data” ini adalah inti teknik resampling seperti bootstrap pada statistika. Cara kedua yang setara adalah rng.choice dengan opsi bawaan replace=True, misalnya rng.choice(peserta, size=8) untuk mengundi delapan nama dari daftar peserta — nama yang sama dapat muncul lebih dari sekali.
Undian Tanpa Pengembalian #
Pada mode without replacement, setiap anggota paling banyak terpilih sekali — seperti undian hadiah yang nomornya tidak dikembalikan ke wadah. Cukup set replace=False pada choice. Contoh berikut mengundi enam nomor lotre dari 1 sampai 49 dengan seed tetap:
import numpy as np
rng = np.random.default_rng(42)
nomor = rng.choice(np.arange(1, 50), size=6, replace=False)
print(nomor)
print(np.sort(nomor))Output yang Dihasilkan:
[31 35 48 43 21 4]
[ 4 21 31 35 43 48]Bedah baris demi baris:
- Baris 4:
np.arange(1, 50)menyiapkan kandidat1sampai49;size=6meminta enam nomor;replace=Falsemenjamin keenam nomor berbeda. - Baris 5: hasil undian mempertahankan urutan tarikan, sehingga tampilannya terlihat acak.
- Baris 6:
np.sortmengurutkan nomor dari kecil ke besar agar tabel hasil undian terbaca rapi — langkah penyajian, bukan bagian dari pengundian.
Ringkasan pilihan method untuk kebutuhan sampling:
| Kebutuhan | Cara | Contoh |
|---|---|---|
| Bilangan bulat acak langsung | rng.integers(low, high, size) | rng.integers(0, 10, size=5) |
| Resampling dengan pengembalian | rng.integers untuk indeks + fancy indexing | data[rng.integers(0, data.size, size=5)] |
| Dengan pengembalian, anggota apa pun | rng.choice(..., replace=True) | rng.choice(peserta, size=8) |
| Tanpa pengembalian | rng.choice(..., replace=False) | rng.choice(kandidat, size=6, replace=False) |
Pembahasan choice yang lebih dalam — parameter bobot peluang p dan sampling baris array — ada pada Chapter random choice. Untuk menghitung frekuensi hasil undian, lihat Chapter Counting dan Frekuensi.