Array tanpa mekanisme pengambilan elemen hanyalah kotak tertutup. Kebutuhan sehari-hari selalu spesifik: penjualan cabang kedua hari ketiga, suhu pengukuran terakhir, elemen pertama yang melampaui ambang. MATLAB menyediakan dua sistem penunjukan — subscript indexing (baris, kolom) dan linear indexing (nomor urut tunggal) — ditambah kata kunci end dan konversi dua arah di antara keduanya. Kesalahan kecil pada indeks berakibat galat langsung atau, lebih buruk, elemen yang salah tanpa pesan apa pun. Materi kita:
- Subscript indexing
A(baris, kolom) - Linear indexing
A(k)berbasis column-major - Konversi
sub2inddanind2sub - Kata kunci
enddan indeks majemuk pada vektor - Galat indeks di luar jangkauan serta perbedaan 1-based vs 0-based
Subscript Indexing: Baris dan Kolom #
Aturannya: A(r, c) menunjuk elemen di baris r kolom c. Mekanismenya: evaluator MATLAB memvalidasi kedua indeks terhadap ukuran array lebih dulu; bila sah, nilai di posisi tersebut dikembalikan, dan bila tidak, eksekusi berhenti dengan galat. Indeks pertama selalu BARIS, indeks kedua selalu KOLOM — urutan ini tidak dapat ditukar.
penjualan = [150 250 350; 400 500 600]; % 2 cabang x 3 hari
fprintf('penjualan(2,3) : %d (cabang 2, hari 3)\n', penjualan(2,3));
fprintf('penjualan(1,1) : %d\n', penjualan(1,1));Output yang Dihasilkan:
penjualan(2,3) : 600 (cabang 2, hari 3)
penjualan(1,1) : 150Mari kita bedah baris-baris kode di atas:
- Baris 1 (
penjualan = ...): matriks 2×3 — baris merepresentasikan cabang toko, kolom merepresentasikan hari penjualan (dalam ribuan rupiah). - Baris 3 (
penjualan(2, 3)): baris 2 kolom 3 →600. Membaca “cabang 2, hari 3” dari data berlabel seperti ini adalah pemakaian natural subscript indexing. - Baris 4 (
penjualan(1, 1)): elemen pojok kiri atas →150.
Linear Indexing: Satu Nomor untuk Semua #
Aturannya: A(k) menunjuk elemen ke-k dalam urutan column-major — turun di kolom pertama, pindah ke kolom kedua, dan seterusnya (kita lihat mekanismenya pada Chapter Konsep Array dan Matriks). Linear dan subscript hanyalah dua bahasa untuk posisi yang sama: sub2ind menerjemahkan pasangan (baris, kolom) menjadi nomor linear, ind2sub menerjemahkan kembali:
fprintf('penjualan(3) : %d (baris 1 kolom 2)\n', penjualan(3));
fprintf('penjualan(4) : %d (baris 2 kolom 2)\n', penjualan(4));
k = sub2ind([2 3], 2, 3);
fprintf('sub2ind([2 3], 2, 3) = %d\n', k);
[brs, klm] = ind2sub([2 3], 4);
fprintf('ind2sub([2 3], 4) = baris %d, kolom %d\n', brs, klm);Output yang Dihasilkan:
penjualan(3) : 250 (baris 1 kolom 2)
penjualan(4) : 500 (baris 2 kolom 2)
sub2ind([2 3], 2, 3) = 6
ind2sub([2 3], 4) = baris 2, kolom 2Mari kita bedah baris-baris kode di atas:
- Baris 1 (
penjualan(3)): urutan column-major adalah 150, 400, 250, 500, 350, 600 — elemen ke-3 bernilai 250, yaitu baris 1 kolom 2. Perhatikan: bukan 350 (yang berada di baris 1 kolom 3)! - Baris 2 (
penjualan(4)): elemen ke-4 → 500 = baris 2 kolom 2. Rumus konversinya:k = (kolom-1) * jumlahBaris + baris. - Baris 4 (
sub2ind([2 3], 2, 3)): matriks 2×3, posisi (2,3) → k = (3-1)×2 + 2 = 6 — elemen terakhir. - Baris 6 (
ind2sub([2 3], 4)): arah sebaliknya, k = 4 terurai menjadi baris 2, kolom 2.
Kata Kunci end dan Indeks Majemuk #
Kata kunci end di dalam kurung indeks berarti “indeks terakhir pada dimensi tersebut”. Mekanismenya: sebelum mengevaluasi indeks, MATLAB mengganti tiap end dengan ukuran dimensi terkait — A(end, 1) menjadi A(2, 1) untuk matriks 2×3. Indeks majemuk memungkinkan kita menunjuk beberapa posisi sekaligus dengan vektor indeks:
fprintf('penjualan(end,1) : %d (cabang terakhir, hari 1)\n', penjualan(end,1));
fprintf('penjualan(1,end) : %d (cabang 1, hari terakhir)\n', penjualan(1,end));
fprintf('penjualan(end,end): %d\n', penjualan(end,end));
stok = [12 8 20 5 15];
fprintf('stok([1 3 5]) : %d %d %d\n', stok([1 3 5]));
fprintf('stok([5 5]) : %d %d\n', stok([5 5]));Output yang Dihasilkan:
penjualan(end,1) : 400 (cabang terakhir, hari 1)
penjualan(1,end) : 350 (cabang 1, hari terakhir)
penjualan(end,end): 600
stok([1 3 5]) : 12 20 15
stok([5 5]) : 15 15Mari kita bedah baris-baris kode di atas:
- Baris 1-3 (
endper dimensi):enddi posisi pertama berarti baris terakhir (2), di posisi kedua berarti kolom terakhir (3).penjualan(end, end)=penjualan(2, 3)= 600. - Baris 5 (
stok([1 3 5])): vektor indeks[1 3 5]mengambil elemen ke-1, ke-3, ke-5 sekaligus — hasilnya vektor baris[12 20 15]. - Baris 6 (
stok([5 5])): indeks boleh berulang — elemen ke-5 diambil dua kali. Pola ini dipakai untuk duplikasi dan penyusunan ulang data.
| Pola | Makna | Contoh pada penjualan (2×3) |
|---|---|---|
A(r, c) | elemen baris r kolom c | penjualan(2, 3) → 600 |
A(k) | elemen ke-k (column-major) | penjualan(4) → 500 |
A(end, c) | baris terakhir, kolom c | penjualan(end, 1) → 400 |
A(r, end) | baris r, kolom terakhir | penjualan(1, end) → 350 |
v([i j k]) | elemen ke-i, j, k sekaligus | stok([1 3 5]) → [12 20 15] |
Indeks di Luar Jangkauan dan 1-Based #
Bila indeks melebihi ukuran array, MATLAB menghentikan eksekusi dengan galat. Pesan galat modern MATLAB menyebut posisi dan batasnya secara eksplisit:
penjualan(3, 1)Index in position 1 exceeds array bounds. Index must not exceed 2.Galat untuk linear indexing berbunyi serupa tetapi menyebut jumlah elemen:
Index exceeds the number of array elements. Index must not exceed 6.Dua pesan tersebut memandu perbaikan: penjualan hanya memiliki 2 baris sehingga indeks baris 3 tidak sah; dan hanya 6 elemen sehingga penjualan(7) tidak sah. (Tutorial lama kadang menampilkan pesan klasik Index exceeds matrix dimensions. — maknanya sama, hanya versi teksnya lebih dahulu.)
Perbedaan penting bagi pemindah bahasa: indeks MATLAB berbasis 1 (1-based). Elemen pertama adalah A(1), bukan A(0); elemen terakhir vektor n elemen adalah v(n), bukan v(n-1):
| Aspek | MATLAB | C / Python / JavaScript |
|---|---|---|
| Elemen pertama | v(1) | v[0] |
Elemen terakhir (n elemen) | v(n) / v(end) | v[n-1] / v[-1] (Python) |
| Indeks sah | 1 sampai n | 0 sampai n-1 |
| Indeks negatif | galat | elemen dari belakang (Python/JS) |
Berkas contoh.m pada bagian bawah halaman mempraktikkan seluruh pola tabel di atas beserta sub2ind/ind2sub pada matriks penjualan dan vektor stok.
Ringkasan #
Subscript indexing A(r, c) menunjuk posisi berbasis baris-kolom, linear indexing A(k) menunjuk nomor urut column-major, dan sub2ind/ind2sub menerjemahkan dua arah di antara keduanya. Kata kunci end merepresentasikan indeks terakhir tiap dimensi, dan vektor indeks mengambil banyak elemen sekaligus. Indeks MATLAB 1-based dan di luar jangkauan langsung memicu galat dengan batas yang disebut eksplisit. Dengan kemampuan menunjuk satu elemen, kita siap mengambil potongan besar: array slicing.