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 sub2ind dan ind2sub
  • Kata kunci end dan 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.

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

text
penjualan(2,3) : 600 (cabang 2, hari 3)
penjualan(1,1)  : 150

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (penjualan = ...): matriks 2×3 — baris merepresentasikan cabang toko, kolom merepresentasikan hari penjualan (dalam ribuan rupiah).
  2. 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.
  3. 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:

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

text
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 2

Mari kita bedah baris-baris kode di atas:

  1. 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)!
  2. Baris 2 (penjualan(4)): elemen ke-4 → 500 = baris 2 kolom 2. Rumus konversinya: k = (kolom-1) * jumlahBaris + baris.
  3. Baris 4 (sub2ind([2 3], 2, 3)): matriks 2×3, posisi (2,3) → k = (3-1)×2 + 2 = 6 — elemen terakhir.
  4. 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:

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

text
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 15

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-3 (end per dimensi): end di posisi pertama berarti baris terakhir (2), di posisi kedua berarti kolom terakhir (3). penjualan(end, end) = penjualan(2, 3) = 600.
  2. 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].
  3. Baris 6 (stok([5 5])): indeks boleh berulang — elemen ke-5 diambil dua kali. Pola ini dipakai untuk duplikasi dan penyusunan ulang data.
PolaMaknaContoh pada penjualan (2×3)
A(r, c)elemen baris r kolom cpenjualan(2, 3) → 600
A(k)elemen ke-k (column-major)penjualan(4) → 500
A(end, c)baris terakhir, kolom cpenjualan(end, 1) → 400
A(r, end)baris r, kolom terakhirpenjualan(1, end) → 350
v([i j k])elemen ke-i, j, k sekaligusstok([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:

matlab
penjualan(3, 1)
text
Index in position 1 exceeds array bounds. Index must not exceed 2.

Galat untuk linear indexing berbunyi serupa tetapi menyebut jumlah elemen:

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

AspekMATLABC / Python / JavaScript
Elemen pertamav(1)v[0]
Elemen terakhir (n elemen)v(n) / v(end)v[n-1] / v[-1] (Python)
Indeks sah1 sampai n0 sampai n-1
Indeks negatifgalatelemen 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.