Pengindeksan

Mengakses elemen dengan pasangan baris-kolom, pengindeksan linear, dan kata kunci end.

Daftar isi

Setelah matriks terbentuk, pekerjaan berikutnya adalah mengambil dan mengubah elemennya. Topik ini membahas pengindeksan MATLAB dari tiga bentuknya: mengakses satu elemen dengan pasangan baris-kolom, membaca elemen dengan satu angka melalui pengindeksan linear yang menyusuri kolom, serta menggunakan kata kunci end untuk ujung dimensi dan operator A(:) untuk meratakan seluruh isi. Penguasaan ketiganya menjadi dasar bagi pengambilan bagian matriks dan penugasan nilai pada bagian tersebut.

Pasangan baris dan kolom#

Elemen matriks diakses dengan menuliskan nama variabel diikuti tanda kurung yang memuat indeks baris lebih dahulu, kemudian indeks kolom, keduanya dipisah koma. Penomoran pada MATLAB berbasis satu, sehingga elemen pertama setiap dimensi bernomor 1 dan sudut kiri atas sebuah matriks selalu berada pada posisi (1, 1). Urutan baris-kolom ini mengikuti kesepakatan baku aljabar linear.

matlab Mengakses elemen dengan pasangan baris-kolom
A = [10 20 30; 40 50 60; 70 80 90];
A(2, 3)
A(1, 1)
A(3, 1)
text Keluaran
ans = 60
ans = 10
ans = 70

Pada matriks 3×33 \times 3 tersebut, A(2, 3) mengambil nilai 60 dari baris kedua kolom ketiga, A(1, 1) mengambil 10 dari sudut kiri atas, dan A(3, 1) mengambil 70 dari baris ketiga kolom pertama. Perhatikan bahwa urutan penulisan menentukan hasil: indeks pertama selalu baris dan indeks kedua selalu kolom. Bentuk ini juga digunakan untuk mengubah nilai, misalnya pernyataan A(2, 3) = 65 akan menimpa satu elemen itu tanpa mengubah elemen lain. Pada data tabel, pasangan indeks sekaligus menjadi alamat sel: baris menunjuk pengamatan yang mana dan kolom menunjuk variabel yang dicatat.

Pengindeksan linear kolom demi kolom#

MATLAB juga mengizinkan satu indeks tunggal untuk matriks apa pun. Pengindeksan linear ini menghitung elemen dengan menyusuri kolom demi kolom dari kiri ke kanan, dan setiap kolom dibaca dari atas ke bawah. Pada matriks dengan mm baris, elemen pada baris ke-ii kolom ke-jj menempati posisi linear

k=i+(j−1) m. k = i + (j - 1)\,m.

Diagram berikut memetakan nomor urut linear pada matriks A yang digunakan di atas. Angka pada lencana biru adalah indeks linear, sedangkan angka besar di tengah sel adalah nilai elemennya.

baris 1baris 2baris 3110420730240550860370680990kolom 1kolom 2kolom 3

Dengan peta tersebut, A(4) menunjuk elemen pertama dari kolom kedua, yaitu 20, dan A(7) menunjuk elemen pertama kolom ketiga, yaitu 30. Dua fungsi bantu menerjemahkan antara kedua bentuk indeks: sub2ind mengubah pasangan baris-kolom menjadi indeks linear, sedangkan ind2sub mengubah indeks linear menjadi pasangan baris-kolom.

matlab Pengindeksan linear dan fungsi penerjemahnya
A(4)
A(7)
sub2ind(size(A), 2, 3)
[baris, kolom] = ind2sub(size(A), 8)
text Keluaran
ans = 20
ans = 30
ans = 8
baris = 2
kolom = 3

Keluaran tersebut memperlihatkan posisi linear ke-8 setara dengan pasangan baris ke-2 kolom ke-3, sesuai rumus k=2+(3−1)×3=8k = 2 + (3 - 1) \times 3 = 8. Kedua fungsi penerjemah jarang digunakan pada skrip sederhana, tetapi berguna ketika posisi data dihitung secara programatik dan hasilnya perlu diperiksa.

Kata kunci end dan meratakan matriks#

Kata kunci end di dalam tanda kurung indeks berarti elemen terakhir pada dimensi tempat end ditulis, sehingga ukuran matriks tidak perlu diketahui lebih dahulu. Operator A(:) meratakan seluruh elemen matriks menjadi satu vektor kolom mengikuti urutan linear yang baru saja dibahas.

matlab Kata kunci end dan operator perataan
A(end, end)
A(end, 1)
semua = A(:)
text Keluaran
ans = 90
ans = 70
semua =

   10
   40
   70
   20
   50
   80
   30
   60
   90

A(end, end) mengambil elemen sudut kanan bawah dan A(end, 1) mengambil elemen baris terakhir kolom pertama. Hasil A(:) berukuran 9×19 \times 1 dan urutannya persis mengikuti nomor lencana pada diagram di atas. Bentuk perataan ini sering digunakan untuk mengubah data apa pun menjadi satu kolom sebelum diolah, misalnya saat menghitung statistik seluruh isi tabel.

Skrip berikut merangkum ketiga bentuk pengindeksan dalam satu berkas utuh.

matlab pengindeksan.m
% pengindeksan.m: mengakses elemen matriks lewat indeks baris-kolom dan linear

A = [10 20 30; 40 50 60; 70 80 90];

fprintf('elemen baris ke-2 kolom ke-3: %d\n', A(2, 3));
fprintf('elemen linear ke-4: %d\n', A(4));
fprintf('elemen terakhir: %d\n', A(end, end));
fprintf('seluruh elemen dalam urutan kolom:\n');
disp(A(:));
text Keluaran
elemen baris ke-2 kolom ke-3: 60
elemen linear ke-4: 20
elemen terakhir: 90
seluruh elemen dalam urutan kolom:
   10
   40
   70
   20
   50
   80
   30
   60
   90

Kesalahan umum#

  • Indeks di luar jangkauan. Setiap indeks harus berada antara 1 dan ukuran dimensinya. Indeks yang melampaui batas menghentikan eksekusi dengan error, sebagaimana dicontohkan berikut. Pola try/catch digunakan agar skrip contoh tetap selesai meskipun pernyataannya gagal, dan pola tersebut dibahas lengkap pada modul alur kendali. Ketika posisi dihitung secara programatik dari hasil perhitungan lain, periksa batasnya dengan size sebelum mengakses elemennya.
matlab Indeks kolom di luar jangkauan ditolak
try
  A(2, 10)
catch e
  disp(e.message)
end
text Keluaran
A(_,10): out of bound 3 (dimensions are 3x3)
  • Menukar urutan baris dan kolom. A(3, 2) bernilai 80 sedangkan A(2, 3) bernilai 60 pada matriks contoh. Kedua penulisan sah sehingga tidak memicu error, tetapi hasilnya berbeda dan kekeliruan seperti ini lolos tanpa peringatan.
  • Menggunakan indeks nol. Kebiasaan dari bahasa yang berbasis nol membawa penulisan A(0, 1). MATLAB berbasis satu sehingga indeks nol selalu ditolak, dan pesan errornya dibahas pada topik slicing bersama salah kaprah seputar rentang indeks. Elemen pertama selalu bernomor satu, sehingga indeks yang dihitung menurut kebiasaan bahasa lain perlu digeser sebelum digunakan.

Ringkasan#

  • Elemen diakses dengan pasangan indeks baris-kolom yang ditulis berurutan dan dipisah koma, dengan penomoran berbasis satu.
  • Pengindeksan linear menghitung elemen kolom demi kolom mengikuti rumus k=i+(j−1) mk = i + (j - 1)\,m, dan sub2ind maupun ind2sub menerjemahkan antara kedua bentuk.
  • Kata kunci end merujuk elemen terakhir pada dimensinya, sedangkan A(:) meratakan matriks menjadi vektor kolom.
  • Indeks di luar jangkauan menghentikan eksekusi dengan error, dan menukar urutan baris-kolom menghasilkan nilai yang salah secara diam-diam.

Referensi#