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.
A = [10 20 30; 40 50 60; 70 80 90];
A(2, 3)
A(1, 1)
A(3, 1)ans = 60
ans = 10
ans = 70Pada matriks 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 baris, elemen pada baris ke- kolom ke- menempati posisi linear
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.
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.
A(4)
A(7)
sub2ind(size(A), 2, 3)
[baris, kolom] = ind2sub(size(A), 8)ans = 20
ans = 30
ans = 8
baris = 2
kolom = 3Keluaran tersebut memperlihatkan posisi linear ke-8 setara dengan pasangan baris ke-2 kolom ke-3, sesuai rumus . 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.
A(end, end)
A(end, 1)
semua = A(:)ans = 90
ans = 70
semua =
10
40
70
20
50
80
30
60
90A(end, end) mengambil elemen sudut kanan bawah dan A(end, 1) mengambil elemen baris terakhir kolom pertama. Hasil A(:) berukuran 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.
% 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(:));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
90Kesalahan 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.
try
A(2, 10)
catch e
disp(e.message)
endA(_,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 , 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#
- Array Indexing — MathWorks — Panduan resmi seluruh bentuk pengindeksan array.
- sub2ind — MathWorks — Rujukan fungsi sub2ind untuk mengubah subskrip menjadi indeks linear.
- ind2sub — MathWorks — Rujukan fungsi ind2sub untuk mengubah indeks linear menjadi subskrip.