SORU
11 HAZİRAN 2009, PERŞEMBE


Fonksiyon MATLAB göster?

MATLAB Göster bir işlevi yok bu beni biraz şaşırttı, ben sensiz yaşayamam bir şey olduğu için bir araya kendim girdim. Orada daha iyi bir sürümü var mı? Atladığım orada MATLAB için biraz standart fonksiyonel programlama kütüphanesi var mı?

function results = map(f,list)
% why doesn't MATLAB have a Map function?
results = zeros(1,length(list));
for k = 1:length(list)
    results(1,k) = f(list(k));
end

end

kullanım örn

map( @(x)x^2,1:10)

CEVAP
11 HAZİRAN 2009, PERŞEMBE


Kısa cevap: yerleşik işlev ARRAYFUN mu tam olarak negösterişlev, sayısal bir dizi için yapar:

>> y = arrayfun(@(x) x^2,1:10)
y =

     1     4     9    16    25    36    49    64    81   100

Yerleşik benzer şekilde davranan diğer iki fonksiyonları vardır: CELLFUN hücre dizilerinin elemanları üzerinde faaliyet gösteren ve STRUCTFUN bir yapının her alanında faaliyet göstermektedir.

Ancak, bu işlevler, eğer vektörleştirme yararlanmak çoğu zaman gerekli, özellikle element-wise kullanarak arithmetic operators değildir. Verdiğin örneğin, vectorized çözümdür:

>> x = 1:10;
>> y = x.^2
y =

     1     4     9    16    25    36    49    64    81   100

Bazı işlemleri otomatik olarak çalışır birimleri arasında (ekleme gibi bir skaler değer bir vektör) Diğerleri operatörleri özel bir sözdizimi için element-bilge işlem (ifade ile bir "." önce operatör). MATLAB birçok fonksiyonları vektör ve matris değişkenleri element-bilge işlemleri kullanarak çalıştırmak için tasarlanmış ve böylece harita fonksiyonları gerekmez.

Özetlemek gerekirse, burada her öğe, bir dizi kare için birkaç farklı yolu 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

Böyle basit bir işlem için elbette seçeneği #1 en mantıklı seçim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BeginnersTech

    BeginnersTec

    8 NİSAN 2011
  • Jason Rosolowski

    Jason Rosolo

    25 EKİM 2006
  • knopik96

    knopik96

    7 Mayıs 2011