Data yang kita olah jarang datang dalam satu array utuh. Penjualan bulan Januari tersimpan di satu berkas, bulan Februari di berkas lain, atau hasil unduhan per batch harus disatukan sebelum totalnya dihitung. Dalam NumPy, tugas menyambungkan beberapa array menjadi satu array yang lebih besar ditangani oleh np.concatenate.

Fungsi ini menerima sebuah list berisi array-array yang akan disambung, sedangkan parameter axis menentukan arah penyambungan: axis=0 searah baris (ke bawah) dan axis=1 searah kolom (ke samping). Bab ini membahas empat hal berikut:

  • Menyambung array satu dimensi.
  • Menyambung array dua dimensi dengan axis=0 dan axis=1.
  • Syarat kesesuaian bentuk yang wajib dipenuhi.
  • Menyambung lebih dari dua array sekaligus.

Menggabungkan Array Satu Dimensi #

Bentuk penyambungan paling sederhana melibatkan array satu dimensi: dua vektor disambung ujung ke ujung menjadi satu vektor yang lebih panjang. Contoh berikut menggabungkan nilai ujian dari dua kelas yang berbeda.

python
import numpy as np

nilai_a = np.array([70, 85, 90])
nilai_b = np.array([78, 92])
gabungan = np.concatenate([nilai_a, nilai_b])
print(gabungan)
print(gabungan.shape)

Output yang Dihasilkan:

text
[70 85 90 78 92]
(5,)

Mari kita bedah apa yang terjadi pada baris-baris di atas:

  1. Baris 3-4 (np.array(...)): dua array satu dimensi bertipe int64 dibuat. Panjang keduanya boleh berbeda, di sini 3 dan 2.
  2. Baris 5 (np.concatenate([nilai_a, nilai_b])): NumPy mengalokasikan array baru berukuran 3 + 2 = 5 elemen, lalu menyalin elemen nilai_a terlebih dahulu diikuti nilai_b. Parameter axis tidak ditulis karena default-nya axis=0, dan bagi array satu dimensi hanya ada satu arah yang mungkin.
  3. Baris 6-7 (print(...)): hasilnya adalah array baru; array asli tidak berubah karena np.concatenate tidak bekerja in-place.

Menyambung Baris dan Kolom dengan axis #

Pada array dua dimensi, pilihan axis menghasilkan dua susunan yang berbeda. axis=0 menempelkan array baru di bawah array sebelumnya sehingga jumlah baris bertambah, sedangkan axis=1 menempelkan array di sampingnya sehingga jumlah kolom bertambah. Contoh berikut memakai data penjualan dua bulan untuk dua toko.

python
import numpy as np

jan = np.array([[120, 135],
                [200, 180]])
feb = np.array([[110, 145],
                [190, 210]])
searah_baris = np.concatenate([jan, feb], axis=0)
print(searah_baris)
print(searah_baris.shape)
searah_kolom = np.concatenate([jan, feb], axis=1)
print(searah_kolom)
print(searah_kolom.shape)

Output yang Dihasilkan:

text
[[120 135]
 [200 180]
 [110 145]
 [190 210]]
(4, 2)
[[120 135 110 145]
 [200 180 190 210]]
(2, 4)

Perhatikan pola bentuk hasil berikut:

  1. axis=0: baris feb ditempel di bawah baris jan. Bentuk berubah dari (2, 2) menjadi (4, 2); jumlah kolom tetap. Secara umum (m1, n) dan (m2, n) menghasilkan (m1 + m2, n).
  2. axis=1: kolom feb ditempel di samping kolom jan. Bentuk berubah dari (2, 2) menjadi (2, 4); jumlah baris tetap. Secara umum (m, n1) dan (m, n2) menghasilkan (m, n1 + n2).

Syarat Kesesuaian Bentuk #

np.concatenate hanya bebas pada satu sumbu, yaitu sumbu yang menjadi tempat penyambungan. Semua dimensi lain wajib sama persis di antara array-array yang disambung. Jika syarat ini dilanggar, NumPy memunculkan ValueError seperti pada contoh berikut.

python
import numpy as np

a = np.ones((2, 3), dtype=int)
b = np.ones((2, 4), dtype=int)
try:
    np.concatenate([a, b], axis=0)
except ValueError as e:
    print("ValueError:", e)

Output yang Dihasilkan:

text
ValueError: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 3 and the array at index 1 has size 4

Untuk array satu dimensi, tidak ada dimensi lain yang perlu dicocokkan, sehingga dua vektor dengan panjang apa pun selalu dapat disambung. Sebaliknya, pada axis=1 jumlah baris wajib sama: array (2, 3) tidak dapat disambung menyamping dengan array (3, 3) walaupun keduanya punya jumlah elemen yang sama.

Menggabungkan Lebih dari Dua Array #

List yang diberikan kepada np.concatenate boleh memuat lebih dari dua array, dan panjang tiap array satu dimensi bebas ditentukan. Contoh berikut menyambungkan catatan penjualan tiga minggu sekaligus.

python
import numpy as np

minggu_1 = np.array([45, 50])
minggu_2 = np.array([52, 48, 60])
minggu_3 = np.array([55])
total = np.concatenate([minggu_1, minggu_2, minggu_3])
print(total)
print(total.shape)

Output yang Dihasilkan:

text
[45 50 52 48 60 55]
(6,)

Tabel berikut merangkum perilaku np.concatenate pada contoh-contoh bab ini:

PemanggilanBentuk inputBentuk hasil
axis=0 (default)(3,) dan (2,)(5,)
axis=0 (default)(2, 2) dan (2, 2)(4, 2)
axis=1(2, 2) dan (2, 2)(2, 4)

Perlu digarisbawahi bahwa np.concatenate hanya menempelkan array pada dimensi yang sudah ada. Ketika kita membutuhkan sumbu yang benar-benar baru pada hasil penggabungan, jawabannya adalah keluarga fungsi stack, akan dibahas lebih lanjut pada Chapter stack dan vstack.