“Harga berapa saja yang dipakai toko bulan ini? Berapa hari tiap harga dipakai? Kode produk mana yang paling sering terjual?” — semua laporan semacam itu berpangkal dari dua pertanyaan: daftar nilai unik, dan hitungan kemunculannya. Fungsi unique menjawab yang pertama; penghitungan frekuensinya kita bangun dengan accumarray — pasangan yang bekerja pada data numerik dan tetap kompatibel lintas versi. Cakupan chapter ini:
uniqueuntuk daftar nilai unik, terurut maupun'stable'- Tiga keluaran
[C, ia, ic]beserta perannya - Frekuensi kemunculan dengan
accumarraydansum(mask) unique(..., 'rows')untuk baris matriksmodesebagai nilai terbanyak
Dataset yang dipakai di chapter ini:
penjualan = [1 12 15000; 2 15 15000; 3 9 16000; 4 22 16000; 5 18 15000;
6 7 17000; 7 25 15000; 8 11 16000; 9 14 17000; 10 20 16000;
11 16 17000; 12 19 15000]; % kolom: hari, unit, harga
suhu = [30 32 31 29 33 34 31 30 35 32]; % suhu harian (derajat)unique: Daftar Nilai Unik #
Aturannya: unique(v) mengembalikan tiap nilai berbeda TEPAT SATU kali, terurut menaik secara default ('sorted'). Mekanismenya: unique menyortir data terlebih dulu, lalu memungut nilai pada posisi yang berbeda dari pendahulunya — duplikat persis diabaikan, dan orientasi mengikuti masukan (kolom masuk, kolom keluar):
harga = penjualan(:, 3);
C = unique(harga);
fprintf('harga unik : '); fprintf('%d ', C'); fprintf('\n');Output yang Dihasilkan:
harga unik : 15000 16000 17000Mari kita bedah baris-baris kode di atas:
- Baris 1 (
harga = penjualan(:, 3)): kolom harga 12×1 memuat tiga nilai berulang — bahan mentah pencarian unik. - Baris 2-3 (
unique(harga)): dua belas nilai menyusut menjadi tiga harga berbeda, terurut dari 15000;C'ditampilkan baris demi baris olehfprintf.
Opsi 'stable' (diperkenalkan MATLAB R2012a) menjaga urutan KEMUNCULAN PERTAMA alih-alih mengurutkan:
kode = [4 1 4 3 1];
fprintf('\nsorted : '); fprintf('%d ', unique(kode)); fprintf('\n');
fprintf('stable : '); fprintf('%d ', unique(kode, 'stable')); fprintf('\n');Output yang Dihasilkan:
sorted : 1 3 4
stable : 4 1 3Penjelasan singkat: 'sorted' menghasilkan 1, 3, 4; 'stable' mempertahankan urutan temuan pertama — 4 muncul lebih dulu di data, lalu 1, lalu 3. Gunakan 'stable' saat urutan kemunculan bermakna, misalnya urutan produk masuk ke rak.
Tiga Keluaran: C, ia, dan ic #
Kekuatan unique baru terbuka pada bentuk tiga keluaran [C, ia, ic] = unique(v). Mekanismenya: ketiga keluaran saling terkait — C daftar nilai unik terurut; ia mencatat posisi kemunculan PERTAMA tiap nilai unik di data asal; ic memetakan setiap elemen data asal ke nomor kelasnya di C (elemen ke-k bernilai C(ic(k))):
[C, ia, ic] = unique(harga);
fprintf('ia (kemunculan pertama): '); fprintf('%d ', ia'); fprintf('\n');
fprintf('ic (kelas tiap baris) : '); fprintf('%d ', ic'); fprintf('\n');
fprintf('rekonstruksi harga == C(ic)? %d\n', all(harga == C(ic)));Output yang Dihasilkan:
ia (kemunculan pertama): 1 3 6
ic (kelas tiap baris) : 1 1 2 2 1 3 1 2 3 2 3 1
rekonstruksi harga == C(ic)? 1Mari kita bedah keluaran-keluaran tersebut:
| Keluaran | Ukuran | Isi |
|---|---|---|
C | 3×1 | nilai unik terurut: 15000, 16000, 17000 |
ia | 3×1 | baris asal tiap nilai unik: 1, 3, 6 |
ic | 12×1 | kelas tiap baris data: 1, 1, 2, 2, 1, 3, … |
ia: harga 15000 pertama kali muncul di baris 1, harga 16000 di baris 3, harga 17000 di baris 6 — polav(ia)mengambil satu contoh observasi per kelas.ic: dua belas baris data diberi label kelas 1, 2, atau 3 — baris 3 dan 4 berlabel 2 karena sama-sama harga 16000. Verifikasiharga == C(ic)mengembalikantruepenuh: memetakanickeCbenar-benar merekonstruksi data asal.
Counting dengan accumarray #
Pertanyaan “berapa kali tiap nilai muncul?” dijawab satu baris: accumarray(ic, 1). Mekanismenya: accumarray memandang ic sebagai nomor keranjang; setiap elemen data melempar nilai 1 ke keranjang kelasnya, lalu seluruh keranjang dijumlahkan — hasilnya jumlah kemunculan tiap kelas, sejajar dengan C:
jumlah = accumarray(ic, 1);
persen = 100 * jumlah / numel(harga);
fprintf('\n harga jumlah persen\n');
fprintf('%8d %8d %8.1f\n', [C jumlah persen].');
fprintf('hari dengan harga 15000: %d\n', sum(harga == 15000));Output yang Dihasilkan:
harga jumlah persen
15000 5 41.7
16000 4 33.3
17000 3 25.0
hari dengan harga 15000: 5Mari kita bedah baris-baris kode di atas:
- Baris 1 (
accumarray(ic, 1)): dua belas angka 1 disebar ke tiga keranjang — lima ke kelas 1 (harga 15000), empat ke kelas 2, tiga ke kelas 3. Frekuensi lahir tanpa satulooppun. - Baris 2-4 (tabel laporan):
[C jumlah persen]merangkai kolom-kolom menjadi matriks laporan;100 * jumlah / numel(harga)mengubah hitungan menjadi persentase (41,7% hari memakai harga 15000). - Baris 6 (
sum(mask)): untuk SATU nilai tertentu,sum(harga == 15000)lebih ringkas daripada memanggilunique— mask dijumlahkan langsung menjadi hitungan.
unique ‘rows’ untuk Matriks #
Transaksi nyata direkam per BARIS — pasangan pelanggan dan produk boleh berulang sebagai duplikat input. Aturannya: unique(M, 'rows') memperlakukan tiap baris sebagai satu kesatuan dan membuang baris yang persis sama; opsi 'stable' tetap berlaku:
transaksi = [2 102; 1 101; 2 102; 3 103; 1 101]; % [pelanggan, produk]
fprintf('\nbaris unik (sorted):\n');
fprintf('%d %d\n', unique(transaksi, 'rows').');
fprintf('baris unik (stable):\n');
fprintf('%d %d\n', unique(transaksi, 'rows', 'stable').');Output yang Dihasilkan:
baris unik (sorted):
1 101
2 102
3 103
baris unik (stable):
2 102
1 101
3 103Mari kita bedah hasil tersebut:
- Blok pertama (
'rows'): lima transaksi menyusut menjadi tiga pasangan unik, terurut menurut kolom pertama — pasangan[2 102]yang tercatat dua kali dihitung satu. - Blok kedua (
'rows','stable'): urutan mengikuti kemunculan pertama —[2 102]memimpin karena memang paling awal di data.
mode: Nilai Terbanyak #
Untuk pertanyaan tunggal “nilai apa yang paling sering muncul?”, fungsi mode() memotong seluruh ritual di atas menjadi satu panggilan. Mekanismenya: mode menghitung frekuensi secara internal dan mengembalikan nilainya langsung; bila beberapa nilai seri di puncak, mode melaporkan nilai TERKECIL dari yang seri:
fprintf('\nmode harga : %d\n', mode(harga));
fprintf('mode suhu : %d\n', mode(suhu));Output yang Dihasilkan:
mode harga : 15000
mode suhu : 30Mari kita bedah hasil tersebut:
mode(harga): harga 15000 menang mutlak dengan lima kemunculan — cocok dengan tabelaccumarray.mode(suhu): nilai 30, 31, dan 32 masing-masing muncul dua kali;modememilih 30, yang terkecil di antara yang seri — perilaku yang perlu diketahui agar hasil deret seri tidak mengejutkan.
Berkas contoh.m pada bagian bawah halaman merangkai seluruh pola — dari unique tiga keluaran, tabel frekuensi accumarray, 'rows', hingga mode — dalam satu script utuh.
Ringkasan #
unique merangkum data menjadi daftar nilai berbeda — terurut secara default, 'stable' untuk urutan kemunculan — dan bentuk [C, ia, ic] membawa peta kelas yang menjadikan ic bahan bakar accumarray penghitung frekuensi. unique(M, 'rows') melakukan hal yang sama untuk baris matriks utuh, sementara mode() menyajikan jawaban instan untuk nilai terbanyak. Statistik lengkap nilai-nilai tersebut — rata-rata, sebaran, hingga korelasi — menjadi menu chapter Statistical Summary berikutnya.