Jawaban singkatnya: fungsi arrayfun
bawaan melakukan persis seperti map
fungsi Anda untuk larik numerik:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Ada dua fungsi bawaan lainnya yang berperilaku serupa: cellfun
(yang beroperasi pada elemen larik sel) dan structfun
(yang beroperasi pada setiap bidang struktur).
Namun, fungsi-fungsi ini seringkali tidak diperlukan jika Anda memanfaatkan vektorisasi, khususnya menggunakan operator aritmatika yang bijaksana . Untuk contoh yang Anda berikan, solusi vektorisasi adalah:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Beberapa operasi akan secara otomatis beroperasi lintas elemen (seperti menambahkan nilai skalar ke vektor) sementara operator lain memiliki sintaks khusus untuk operasi elemen-bijaksana (dilambangkan dengan a .
sebelum operator). Banyak fungsi bawaan di MATLAB dirancang untuk beroperasi pada argumen vektor dan matriks menggunakan operasi bijak-elemen (sering diterapkan pada dimensi tertentu, seperti sum
danmean
misalnya), dan karenanya tidak memerlukan fungsi peta.
Untuk meringkas, berikut adalah beberapa cara berbeda untuk mengkuadratkan setiap elemen dalam sebuah array:
x = 1:10; % Sample array
f = @(x) x.^2; % Anonymous function that squares each element of its input
% Option #1:
y = x.^2; % Use the element-wise power operator
% Option #2:
y = f(x); % Pass a vector to f
% Option #3:
y = arrayfun(f, x); % Pass each element to f separately
Tentu saja, untuk operasi sederhana seperti itu, opsi # 1 adalah pilihan yang paling masuk akal (dan efisien).