Kısa cevap: yerleşik işlev arrayfun
, map
işlevinizin sayısal diziler için yaptığını tam olarak yapar:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
Benzer şekilde davranan iki yerleşik işlev daha vardır: cellfun
(hücre dizilerinin öğeleri üzerinde çalışan) ve structfun
(bir yapının her alanında çalışan).
Bununla birlikte, özellikle eleman bazlı aritmetik operatörleri kullanarak vektörleştirmeden yararlanırsanız, bu işlevler genellikle gerekli değildir . Verdiğiniz örnek için, vektörleştirilmiş bir çözüm şöyle olacaktır:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
Bazı işlemler, öğeler arasında otomatik olarak çalışır (bir vektöre skaler bir değer eklemek gibi), diğerlerinde ise öğe bazlı işlem için özel bir sözdizimi vardır (bir .
operatörden önce ). MATLAB'daki birçok yerleşik işlev, öğe bazlı işlemler (genellikle belirli bir boyuta uygulanır, örneğin sum
ve mean
örneğin) kullanarak vektör ve matris argümanları üzerinde çalışmak üzere tasarlanmıştır ve bu nedenle harita işlevleri gerektirmez.
Özetlemek gerekirse, burada bir dizideki her bir öğenin karesini almanın bazı farklı yolları vardır:
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
Elbette, bu kadar basit bir işlem için 1. seçenek en mantıklı (ve etkili) seçimdir.