Data penjualan jarang tiba dalam satu paket utuh: laporan mingguan datang setiap Senin, pengukuran sensor dikirim per batch, dan nilai ujian tiap kelas tersimpan terpisah. MATLAB menyediakan concatenation — penggabungan beberapa array menjadi satu array baru — sebagai alat standar untuk menyusun potongan-potongan tersebut. Concatenation tidak mengubah array aslinya; MATLAB menyalin isi array lama ke array hasil yang lebih besar. Bab ini membahas penggabungan horizontal dan vertikal dengan kurung siku, fungsi horzcat/vertcat/cat, penggunaan array kosong, hingga pola membangun tabel data secara bertahap.

Operator Kurung Siku untuk Menggabungkan Array #

Aturan concatenation mengikuti dua pemisah yang sudah kita kenal saat membuat matriks: spasi (atau koma) berarti “kolom berikutnya”, titik koma berarti “baris berikutnya”. Ekspresi [A B] meletakkan B di sebelah kanan A (penggabungan horizontal), sedangkan [A; B] meletakkan B di bawah A (penggabungan vertikal).

Di balik layar, ketika MATLAB mengevaluasi [A; B], interpreter mengalokasikan array baru berukuran gabungan, menyalin seluruh elemen A lalu seluruh elemen B ke posisinya masing-masing, dan mengikat array hasil tersebut ke variabel di sisi kiri. Variabel A dan B sendiri tidak berubah sama sekali.

matlab
tokoA = [120 135 110 140];      % minggu pertama, toko A
tokoB = [200 190 210 205];      % minggu pertama, toko B
minggu1 = [tokoA; tokoB];       % vertikal: tumpuk dua baris

minggu2 = [130 125 145 115; 195 215 200 210];
duaMinggu = [minggu1 minggu2];  % horizontal: sambung delapan kolom

fprintf('minggu1   : %d baris x %d kolom\n', size(minggu1,1), size(minggu1,2));
fprintf('duaMinggu : %d baris x %d kolom\n', size(duaMinggu,1), size(duaMinggu,2));

Output yang Dihasilkan:

text
minggu1   : 2 baris x 4 kolom
duaMinggu : 2 baris x 8 kolom

Mari kita bedah baris-baris kode di atas:

  1. Baris 3 (minggu1 = [tokoA; tokoB]): dua vektor baris 1×4 ditumpuk menjadi matriks 2×4 — jumlah kolom kedua operand sama, sehingga syarat penggabungan vertikal terpenuhi.
  2. Baris 6 (duaMinggu = [minggu1 minggu2]): dua matriks 2×4 disandingkan menjadi 2×8 — jumlah baris kedua operand sama, sehingga syarat penggabungan horizontal terpenuhi.
  3. Baris 8-9 (size): fungsi size(x,1) dan size(x,2) melaporkan jumlah baris dan kolom, sehingga kita dapat memverifikasi ukuran hasil penggabungan.

Aturan Dimensi dan Galat Concatenation #

Operator kurung siku tidak sembarang menggabungkan: setiap operand harus membentuk kotak (persegi panjang) yang rapi. Tabel berikut merangkum syaratnya:

BentukArahSyaratUkuran hasil
[A B] atau [A, B]horizontal, kolom bertambahjumlah baris A = jumlah baris Bm×(nA+nB)
[A; B]vertikal, baris bertambahjumlah kolom A = jumlah kolom B(mA+mB)×n

Bila syarat dilanggar, MATLAB menolak membuat array yang berbentuk tidak rapi. Contoh berikut mencoba menyandingkan matriks 2×2 dengan matriks 3×3:

matlab
A = [1 2; 3 4];              % 2x2
B = [1 2 3; 4 5 6; 7 8 9];   % 3x3 — jumlah baris berbeda
[A B]
text
Error using horzcat
Dimensions of matrices being concatenated are not consistent.

Fungsi horzcat, vertcat, dan cat #

Notasi [A B] sebenarnya adalah bentuk ringkas dari pemanggilan fungsi horzcat(A, B), dan [A; B] adalah vertcat(A, B). Adapun fungsi cat(dim, A, B) merupakan generalisasi yang menggabungkan menurut dimensi eksplisit: cat(1, A, B) setara [A; B], cat(2, A, B) setara [A B], dan cat(3, A, B) menumpuk A dan B sebagai dua layer array tiga dimensi.

Mekanisme cat sederhana: argumen dim menentukan sumbu tempat array-array digabungkan, sedangkan ukuran pada dimensi lain harus sama persis di semua operand. Fungsi cat juga tersedia di GNU Octave, sehingga contoh berikut dapat diuji di kedua lingkungan:

matlab
samping = cat(2, minggu1, minggu2);   % sama dengan [minggu1 minggu2]
laporan = cat(3, minggu1, minggu2);   % layer baru: 2x4x2

fprintf('cat(2, ...) : %dx%d\n', size(samping,1), size(samping,2));
fprintf('cat(3, ...) : %dx%dx%d\n', ...
        size(laporan,1), size(laporan,2), size(laporan,3));
fprintf('laporan(2,4,2) = %d\n', laporan(2,4,2));

Output yang Dihasilkan:

text
cat(2, ...) : 2x8
cat(3, ...) : 2x4x2
laporan(2,4,2) = 210

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (cat(2, ...)): minggu1 dan minggu2 disandingkan pada dimensi 2 — hasilnya 2×8, identik dengan [minggu1 minggu2].
  2. Baris 2 (cat(3, ...)): minggu1 menjadi layer 1 dan minggu2 menjadi layer 2 — hasilnya 2×4×2, yaitu dua lembar matriks yang bertumpuk.
  3. Baris 6 (laporan(2,4,2)): pengindeksan dengan tiga subscript — baris 2, kolom 4, layer 2 — membaca elemen minggu2(2,4) yang bernilai 210.

Concatenation dengan Array Kosong #

Array kosong [] adalah array berukuran 0×0. Karena ukuran nol tidak menambah baris maupun kolom, menggabungkan array apa pun dengan [] tidak mengubah apa pun — [] berperan sebagai elemen identitas pada concatenation:

matlab
sisa = [7 8];
gabungan = [sisa []];         % array kosong tidak menambah apa pun

fprintf('gabungan = [sisa []] : %dx%d, isi %d %d\n', ...
        size(gabungan,1), size(gabungan,2), gabungan(1), gabungan(2));

Output yang Dihasilkan:

text
gabungan = [sisa []] : 1x2, isi 7 8

Sifat identitas inilah yang membuat pola [sisa []] aman dipakai ketika salah satu sumber data bisa saja kosong (misalnya hasil pencarian yang tidak menemukan apa pun) — hasilnya tetap berupa array valid.

Membangun Tabel Data Bertahap #

Masalah nyata yang sering kita hadapi: data mentah tiba baris demi baris, sedangkan array harus utuh sejak awal. Solusinya adalah pola mulai dari kosong, tambah baris setiap kali data baru tiba. Contoh berikut mencatat pesanan kopi — tiap baris berisi nomor meja dan jumlah cup:

matlab
pesanan = [];                 % array kosong 0x0
pesanan = [pesanan; 1 45];    % baris baru: nomor meja, jumlah cup
pesanan = [pesanan; 2 50];
pesanan = [pesanan; 3 55];

fprintf('pesanan : %dx%d\n', size(pesanan,1), size(pesanan,2));
fprintf('meja 1: %d cup, meja 2: %d cup, meja 3: %d cup\n', ...
        pesanan(1,2), pesanan(2,2), pesanan(3,2));

Output yang Dihasilkan:

text
pesanan : 3x2
meja 1: 45 cup, meja 2: 50 cup, meja 3: 55 cup

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (pesanan = []): titik awal — array tanpa elemen, siap ditumbuhi baris.
  2. Baris 2-4 (pesanan = [pesanan; ...]): tiap baris membaca seluruh pesanan lama, menyalinnya ke array baru, menambahkan satu baris data, lalu hasilnya menimpa pesanan. Ukuran tumbuh 0×2 → 1×2 → 2×2 → 3×2 karena jumlah kolom konsisten (dua) sejak baris pertama.
  3. Baris 6-7 (fprintf): pesanan(i,2) membaca kolom kedua (jumlah cup) sehingga kita dapat mencetak rekap tiap meja.

Ringkasan #

Concatenation menggabungkan array lewat operator kurung siku: [A B] horizontal dengan syarat jumlah baris sama, [A; B] vertikal dengan syarat jumlah kolom sama, dan cat(dim, A, B) untuk dimensi mana pun termasuk layer 3-D. Array kosong [] berperan sebagai identitas sehingga cocok menjadi titik awal pola bertumbuh [x; barisBaru]. Berkas contoh.m pada bagian bawah halaman memuat seluruh contoh bab ini dan dapat dijalankan utuh di MATLAB maupun Octave.