Saat menyiapkan data sintetis, jadwal yang berulang, atau pola bobot, kita sering perlu menggandakan nilai yang sama berkali-kali. NumPy menyediakan dua fungsi dengan filosofi berbeda: np.repeat mengulang setiap elemen satu per satu, sedangkan np.tile menggandakan seluruh array sebagai satu blok utuh.
Perbedaannya terdengar kecil, tetapi hasilnya jauh berbeda. Pada array [1, 2], pengulangan dua kali dengan np.repeat menghasilkan [1 1 2 2], sedangkan np.tile menghasilkan [1 2 1 2]. Bab ini membedah keduanya pada array satu dan dua dimensi, lalu ditutup dengan contoh praktis membangun pola untuk mask dan perhitungan skala.
repeat: Mengulang Setiap Elemen #
np.repeat menerima array dan jumlah pengulangan repeats. Setiap elemen diulang berkelompok sebelum melanjutkan ke elemen berikutnya.
import numpy as np
kode = np.array([1, 2, 3])
print(np.repeat(kode, 3))Output yang Dihasilkan:
[1 1 1 2 2 2 3 3 3]Baris 4 (np.repeat(kode, 3)): setiap elemen diulang tiga kali secara berkelompok — 1 tiga kali, lalu 2 tiga kali, lalu 3 tiga kali. Urutan relatif antarelemen tidak berubah, hanya panjang array yang bertambah menjadi sembilan.
repeats Berbeda per Elemen dan Parameter axis #
Argumen repeats juga bisa berupa list yang menentukan jumlah pengulangan masing-masing elemen. Pada array dua dimensi, parameter axis menentukan arah pengulangan.
import numpy as np
kode = np.array([1, 2, 3])
print(np.repeat(kode, [2, 1, 3]))
matriks = np.array([[1, 2], [3, 4]])
print(np.repeat(matriks, 2, axis=0))
print(np.repeat(matriks, 2, axis=1))
print(np.repeat(matriks, 2))Output yang Dihasilkan:
[1 1 2 3 3 3]
[[1 2]
[1 2]
[3 4]
[3 4]]
[[1 1 2 2]
[3 3 4 4]]
[1 1 2 2 3 3 4 4]Penjelasannya:
- Baris 4 (
np.repeat(kode, [2, 1, 3])): list[2, 1, 3]memberi jumlah pengulangan yang berbeda per elemen —1dua kali,2satu kali,3tiga kali. Panjang list harus sama dengan panjang array. - Baris 7 (
axis=0): setiap baris diulang utuh dua kali ke bawah — baris[1 2]muncul dua kali, lalu baris[3 4]dua kali. - Baris 8 (
axis=1): setiap kolom diulang dua kali di samping kolom aslinya, sehingga[1 2]menjadi[1 1 2 2]. - Baris 9 (tanpa
axis): array diratakan menjadi 1-D terlebih dahulu, sehingga hasilnya[1 1 2 2 3 3 4 4].
tile: Menggandakan Blok Utuh #
np.tile memperlakukan seluruh array sebagai satu ubin yang diletakkan berulang kali. Argumen kedua boleh berupa satu angka atau tuple yang menentukan banyaknya ubin per dimensi.
import numpy as np
runtun = np.array([1, 2, 3])
print(np.tile(runtun, 2))
print(np.tile(runtun, (2, 1)))
pola = np.array([[0, 1], [1, 0]])
print(np.tile(pola, (2, 3)))Output yang Dihasilkan:
[1 2 3 1 2 3]
[[1 2 3]
[1 2 3]]
[[0 1 0 1 0 1]
[1 0 1 0 1 0]
[0 1 0 1 0 1]
[1 0 1 0 1 0]]Yang dilakukan NumPy:
- Baris 4 (
np.tile(runtun, 2)): blok[1 2 3]diletakkan dua kali berurutan; urutan di dalam blok tetap terjaga. - Baris 5 (
np.tile(runtun, (2, 1))): tuple(2, 1)dibaca “dua ubin ke bawah, satu ubin ke kanan”. Array 1-D naik derajat menjadi matriks dua baris. - Baris 8 (
np.tile(pola, (2, 3))): papan catur2 x 2digandakan menjadi grid4 x 6— dua baris ubin, tiga kolom ubin.
Memilih repeat atau tile #
Tabel berikut merangkum perbedaan keduanya:
| Aspek | np.repeat | np.tile |
|---|---|---|
| Satuan pengulangan | satu elemen | blok array utuh |
[1, 2] diulang 2 kali | [1 1 2 2] | [1 2 1 2] |
| Kontrol frekuensi | list per elemen, mis. [2, 1] | tuple per dimensi, mis. (2, 3) |
| Efek pada dimensi | axis mengulang dimensi yang ada | tiles menambah dimensi baru di depan |
Sebagai penutup, contoh praktis: bobot berulang untuk data penjualan dibangun dengan tile, dan mask kategori pelanggan dibangun dengan repeat.
import numpy as np
bobot_hari = np.array([1.0, 0.8, 0.6])
bobot = np.tile(bobot_hari, 4)
penjualan = np.arange(1, 13)
print(penjualan * bobot)
pelanggan_baru = np.repeat([True, False], 3)
print(pelanggan_baru)Output yang Dihasilkan:
[ 1. 1.6 1.8 4. 4. 3.6 7. 6.4 5.4 10. 8.8 7.2]
[ True True True False False False]Rinciannya:
- Baris 4 (
bobot = np.tile(bobot_hari, 4)): pola tiga periode[1.0 0.8 0.6]digandakan empat kali sehingga panjangnya 12 — sama dengan panjangpenjualan. - Baris 6 (
penjualan * bobot): perkalian elemen-demi-elemen mengalikan tiap nilai penjualan dengan bobot posisinya; syaratnya kedua array sama panjang. - Baris 8 (
np.repeat([True, False], 3)): mask yang menandai tiga pelanggan pertama sebagai pelanggan baru dan tiga berikutnya bukan. Pola seperti ini berguna untuk menandai grup berukuran sama.