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.
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:
minggu1 : 2 baris x 4 kolom
duaMinggu : 2 baris x 8 kolomMari kita bedah baris-baris kode di atas:
- 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. - Baris 6 (
duaMinggu = [minggu1 minggu2]): dua matriks 2×4 disandingkan menjadi 2×8 — jumlah baris kedua operand sama, sehingga syarat penggabungan horizontal terpenuhi. - Baris 8-9 (
size): fungsisize(x,1)dansize(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:
| Bentuk | Arah | Syarat | Ukuran hasil |
|---|---|---|---|
[A B] atau [A, B] | horizontal, kolom bertambah | jumlah baris A = jumlah baris B | m×(nA+nB) |
[A; B] | vertikal, baris bertambah | jumlah 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:
A = [1 2; 3 4]; % 2x2
B = [1 2 3; 4 5 6; 7 8 9]; % 3x3 — jumlah baris berbeda
[A B]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:
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:
cat(2, ...) : 2x8
cat(3, ...) : 2x4x2
laporan(2,4,2) = 210Mari kita bedah baris-baris kode di atas:
- Baris 1 (
cat(2, ...)):minggu1danminggu2disandingkan pada dimensi 2 — hasilnya 2×8, identik dengan[minggu1 minggu2]. - Baris 2 (
cat(3, ...)):minggu1menjadi layer 1 danminggu2menjadi layer 2 — hasilnya 2×4×2, yaitu dua lembar matriks yang bertumpuk. - Baris 6 (
laporan(2,4,2)): pengindeksan dengan tiga subscript — baris 2, kolom 4, layer 2 — membaca elemenminggu2(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:
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:
gabungan = [sisa []] : 1x2, isi 7 8Sifat 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:
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:
pesanan : 3x2
meja 1: 45 cup, meja 2: 50 cup, meja 3: 55 cupMari kita bedah baris-baris kode di atas:
- Baris 1 (
pesanan = []): titik awal — array tanpa elemen, siap ditumbuhi baris. - Baris 2-4 (
pesanan = [pesanan; ...]): tiap baris membaca seluruhpesananlama, menyalinnya ke array baru, menambahkan satu baris data, lalu hasilnya menimpapesanan. Ukuran tumbuh 0×2 → 1×2 → 2×2 → 3×2 karena jumlah kolom konsisten (dua) sejak baris pertama. - 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.