Fungsi agregat

Merangkum data dengan sum, mean, dan max beserta argumen dimensi.

Daftar isi

Fungsi agregat merangkum sebuah array menjadi ukuran yang lebih ringkas: total, rerata, nilai terbesar, atau jawaban logis atas satu pertanyaan tentang seluruh data. Topik ini membahas perilaku baku sum, mean, max, dan min yang bekerja kolom demi kolom pada matriks, serta pengarahan arah perangkuman dengan argumen dimensi. Topik ini juga membahas bentuk lintas versi untuk menjangkau seluruh elemen, keluaran ganda max yang sekaligus melaporkan posisi nilai terbesar, serta any dan all sebagai agregat logika. Setelah topik ini dibaca, ringkasan data dapat dihitung searah kolom, searah baris, atau atas seluruh isi tanpa satu pun perulangan.

Perilaku kolom demi kolom#

Ketika masukan berupa matriks, sum, mean, max, dan min bekerja sepanjang dimensi pertama dan menghasilkan satu baris yang memuat hasil tiap kolom. Konvensi ini berlaku seragam pada fungsi-fungsi pengurangan MATLAB, sehingga satu kebiasaan membaca berlaku untuk semuanya. Penjumlahan tiap kolom pada matriks AA berukuran m×nm \times n dirumuskan

sj=∑i=1maij, s_j = \sum_{i=1}^{m} a_{ij},

yakni nilai kolom ke-jj dijumlahkan menuruni baris dari i=1i = 1 sampai i=mi = m.

matlab Agregasi kolom demi kolom pada matriks
A = [1 2 3; 4 5 6; 7 8 9];
disp(sum(A));
disp(mean(A));
disp(max(A));
disp(min(A));
text Keluaran
   12   15   18
   4   5   6
   7   8   9
   1   2   3

Kolom pertama [1 4 7] menjumlah menjadi 12 dengan rerata 4, maksimum 7, dan minimum 1, dan pola yang sama berlaku pada dua kolom lainnya. Konvensi kolom ini selaras dengan kebiasaan penyimpanan data pada MATLAB: satu kolom memuat satu variabel pengukuran, sehingga hasil per kolom langsung menjadi ringkasan per variabel. Tata letak penyimpanan internal yang menempatkan kolom berdampingan di memori turut membuat arah penjumlahan ini alami bagi mesin, bukan hanya bagi pembaca.

Arah agregasi dengan argumen dimensi#

Argumen kedua pada fungsi agregat menentukan dimensi yang disusuri. Bentuk sum(A, 1) menjumlahkan sepanjang dimensi pertama sehingga hasilnya per kolom dan sama dengan sum(A). Bentuk sum(A, 2) menjumlahkan sepanjang dimensi kedua, yaitu perbaris dari kolom ke kolom, sehingga hasilnya vektor kolom berisi total tiap baris. Angka dimensi dengan sendirinya menandakan arah yang hilang dari hasil: dimensi satu menghasilkan satu baris, sedangkan dimensi dua menghasilkan satu kolom.

matlab Arah agregasi dengan argumen dimensi
A = [1 2 3; 4 5 6; 7 8 9];
disp(sum(A, 1));
disp(sum(A, 2));
disp(mean(A, 2));
text Keluaran
   12   15   18
    6
   15
   24
   2
   5
   8

Baris pertama [1 2 3] menjumlah menjadi 6 dengan rerata 2, dan dua baris berikutnya mengikuti pola yang sama. Kedua arah ini saling melengkapi pada data tabel: agregasi per kolom merangkum tiap variabel lintas seluruh pengamatan, sedangkan agregasi per baris merangkum tiap pengamatan lintas seluruh variabel. Pemilihan arah ditentukan oleh pertanyaan analisis, bukan oleh bentuk data, dan argumen dimensi membuat pilihan itu eksplisit pada baris kodenya.

Menjangkau seluruh elemen#

Menjangkau seluruh isi matriks dilakukan dengan dua langkah yang lazim digabungkan: operator A(:) meratakan seluruh elemen menjadi satu vektor kolom, lalu fungsi agregat bekerja pada vektor itu. Bentuk sum(A(:)) menghasilkan satu angka dan berjalan identik pada semua versi MATLAB maupun GNU Octave, sehingga bentuk ini menjadi pilihan yang aman untuk kode yang harus lintas implementasi.

matlab Menjumlahkan seluruh elemen dengan bentuk lintas versi
A = [1 2 3; 4 5 6; 7 8 9];
total = sum(A(:));
fprintf('total seluruh elemen: %d\n', total);
text Keluaran
total seluruh elemen: 45

MATLAB R2018b dan versi lebih baru menyediakan opsi 'all' yang merangkum seluruh elemen secara langsung tanpa perataan.

matlab
% tidak-dijalankan
% Opsi 'all' tersedia pada MATLAB R2018b ke atas, bukan pada Octave 9.4.
total = sum(A, 'all')

Blok itu ditandai tidak-dijalankan karena Octave 9.4, sebagai lingkungan verifikasi contoh jalur ini, menolak opsinya dengan pesan error sum: unrecognized type argument 'all'. Kesalahan versi seperti ini tidak muncul pada bentuk sum(A(:)), dan bentuk perataan juga mudah dikembangkan menjadi mean(A(:)), max(A(:)), atau penghitungan masker seperti sum(A(:) > 5) yang menghitung banyak elemen melebihi suatu ambang. Karena itu bentuk perataan menjadi kebiasaan baku pada kode yang ditulis untuk kedua implementasi.

Keluaran ganda nilai terbesar dan posisinya#

Fungsi max dan min dapat diminta melaporkan posisi kemunculan nilai ekstremnya melalui bentuk keluaran ganda [nilai, indeks] = max(v). Indeks yang dilaporkan adalah kemunculan pertama, sehingga pada data dengan nilai terbesar kembar, yang dilaporkan adalah posisi yang lebih awal. Bentuk yang sama berlaku untuk min dengan makna posisi nilai terkecil.

matlab Contoh: keluaran ganda max pada vektor dan matriks
v = [3 9 2 9 5];
[maks, idx] = max(v);
fprintf('nilai terbesar %d pertama kali muncul di posisi %d\n', maks, idx);
A = [1 2 3; 4 5 6; 7 8 9];
[t, i] = max(A);
disp(t);
disp(i);
text Keluaran
nilai terbesar 9 pertama kali muncul di posisi 2
   7   8   9
   3   3   3

Nilai terbesar v adalah 9, dan yang dilaporkan adalah kemunculan pada posisi kedua, bukan posisi keempat yang juga bernilai 9. Pada matriks, keluaran ganda tetap mengikuti konvensi kolom: t memuat nilai terbesar tiap kolom dan i memuat nomor baris kemunculannya, sehingga nilai terbesar pada ketiga kolom berada di baris ketiga. Pasangan nilai dan posisi ini menjadi alat baku pelaporan, misalnya menyebutkan siswa mana yang memperoleh nilai tertinggi pada suatu mata ujian tanpa mencari posisinya secara terpisah.

any dan all sebagai agregat logika#

Fungsi any dan all merangkum array logika menjadi satu jawaban per kolom. any bernilai benar bila sekurang-kurangnya satu elemen kolom bernilai benar, sedangkan all bernilai benar bila seluruh elemen kolom bernilai benar. Keduanya menerima argumen dimensi dengan makna yang sama seperti fungsi agregat numerik, dan bekerja langsung pada hasil ekspresi relasional.

matlab any dan all pada hasil ekspresi relasional
A = [1 2 3; 4 5 6; 7 8 9];
disp(any(A > 7));
disp(all(A > 2));
disp(any(A > 7, 2));
text Keluaran
  0  1  1
  0  0  1
  0
  0
  1

Hasil any(A > 7) menyatakan bahwa kolom kedua dan ketiga memuat elemen di atas tujuh, sedangkan kolom pertama tidak. Hasil all(A > 2) menyatakan bahwa hanya kolom ketiga yang seluruh elemennya melampaui dua. Dengan argumen dimensi dua, any(A > 7, 2) menyatakan bahwa hanya baris ketiga yang memuat elemen di atas tujuh. Pada pemeriksaan kualitas data, pasangan ini menjawab pertanyaan validasi seperti apakah masih ada pencatatan di luar rentang wajar, atau apakah seluruh pencatatan sudah lolos ambang. Kedua pertanyaan dijawab tanpa memeriksa elemen satu per satu.

Merangkum nilai ujian satu berkas penuh#

Ringkasan nyata memadukan seluruh kelengkapan di atas dalam satu berkas. Kasus berikut merangkum nilai ujian empat siswa pada tiga mata ujian. Total per mata ujian memakai konvensi kolom, rerata per siswa memakai argumen dimensi, nilai tertinggi per mata ujian memakai keluaran ganda, dan rerata seluruh kelas memakai bentuk perataan.

matlab ringkas_nilai.m
% ringkas_nilai.m: merangkum nilai ujian empat siswa pada tiga mata ujian

% baris menyimpan siswa, kolom menyimpan mata ujian
nilai = [80 75 90; 65 88 78; 92 70 85; 78 82 74];
siswa = {'Ali', 'Budi', 'Citra', 'Dewi'};
mapel = {'Matematika', 'Fisika', 'Kimia'};

fprintf('total per mata ujian:\n');
disp(sum(nilai));

fprintf('rerata per siswa:\n');
disp(mean(nilai, 2));

% perulangan hanya mencetak label, seluruh hitungan tetap teragregasi
[maks, idx] = max(nilai);
for k = 1:numel(mapel)
  fprintf('tertinggi %-10s: %d (%s)\n', mapel{k}, maks(k), siswa{idx(k)});
end

fprintf('rerata seluruh kelas: %.2f\n', mean(nilai(:)));
text Keluaran
total per mata ujian:
   315   315   327
rerata per siswa:
   81.667
   77.000
   82.333
   78.000
tertinggi Matematika: 92 (Citra)
tertinggi Fisika    : 88 (Budi)
tertinggi Kimia     : 90 (Ali)
rerata seluruh kelas: 79.75

Satu-satunya perulangan pada skrip ini mencetak label mata ujian, bukan menghitung, karena penerjemahan angka menjadi teks memang pekerjaan per item. Seluruh perhitungan berjalan melalui fungsi agregat: total tiap mata ujian, rerata tiap siswa, pasangan nilai dan pemegang tertinggi, hingga rerata kelas dari 12 nilai. Jadi, vektorisasi tidak menghapus perulangan dari semua pekerjaan, melainkan menyingkirkannya dari pekerjaan yang berupa hitungan array.

Kesalahan umum#

  • Mengharapkan agregasi per baris secara baku. sum(A) merangkum tiap kolom, bukan tiap baris, sehingga hasil yang diharapkan per baris harus memakai sum(A, 2). Kekeliruan arah tidak memicu error dan hanya terlihat ketika ukuran hasil tidak sesuai dugaan.
  • Berasumsi sum(A) menjumlahkan seluruh isi. Hasilnya berupa satu baris per kolom, sedangkan total seluruh elemen memerlukan sum(A(:)) atau opsi 'all' pada MATLAB R2018b ke atas. Pada Octave, opsi 'all' belum dikenali sehingga bentuk perataan menjadi pilihan lintas versi.
  • Membaca indeks keluaran max pada matriks sebagai indeks global. Indeks yang dilaporkan adalah nomor baris pada kolomnya masing-masing. Nomor elemen tunggal di seluruh matriks diperoleh dengan [t, i] = max(A(:)), yang melaporkan indeks linear menurut urutan kolom.

Ringkasan#

  • sum, mean, max, dan min merangkum matriks kolom demi kolom dan menghasilkan satu baris ringkasan.
  • Argumen dimensi mengarahkan perangkuman: sum(A, 2) menjumlahkan per baris, sedangkan sum(A(:)) menjumlahkan seluruh elemen dengan bentuk yang berjalan lintas versi.
  • Bentuk [nilai, indeks] = max(v) melaporkan nilai ekstrem sekaligus posisi kemunculan pertamanya, dan pada matriks keduanya mengikuti konvensi kolom.
  • any dan all merangkum array logika menjadi jawaban validasi atas seluruh kolom, baris, atau isi data.

Referensi#