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.

python
import numpy as np

kode = np.array([1, 2, 3])
print(np.repeat(kode, 3))

Output yang Dihasilkan:

text
[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.

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

text
[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:

  1. Baris 4 (np.repeat(kode, [2, 1, 3])): list [2, 1, 3] memberi jumlah pengulangan yang berbeda per elemen — 1 dua kali, 2 satu kali, 3 tiga kali. Panjang list harus sama dengan panjang array.
  2. Baris 7 (axis=0): setiap baris diulang utuh dua kali ke bawah — baris [1 2] muncul dua kali, lalu baris [3 4] dua kali.
  3. Baris 8 (axis=1): setiap kolom diulang dua kali di samping kolom aslinya, sehingga [1 2] menjadi [1 1 2 2].
  4. 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.

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

text
[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:

  1. Baris 4 (np.tile(runtun, 2)): blok [1 2 3] diletakkan dua kali berurutan; urutan di dalam blok tetap terjaga.
  2. 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.
  3. Baris 8 (np.tile(pola, (2, 3))): papan catur 2 x 2 digandakan menjadi grid 4 x 6 — dua baris ubin, tiga kolom ubin.

Memilih repeat atau tile #

Tabel berikut merangkum perbedaan keduanya:

Aspeknp.repeatnp.tile
Satuan pengulangansatu elemenblok array utuh
[1, 2] diulang 2 kali[1 1 2 2][1 2 1 2]
Kontrol frekuensilist per elemen, mis. [2, 1]tuple per dimensi, mis. (2, 3)
Efek pada dimensiaxis mengulang dimensi yang adatiles menambah dimensi baru di depan

Sebagai penutup, contoh praktis: bobot berulang untuk data penjualan dibangun dengan tile, dan mask kategori pelanggan dibangun dengan repeat.

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

text
[ 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:

  1. 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 panjang penjualan.
  2. Baris 6 (penjualan * bobot): perkalian elemen-demi-elemen mengalikan tiap nilai penjualan dengan bobot posisinya; syaratnya kedua array sama panjang.
  3. 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.