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

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • The Verge

    The Verge

    8 AĞUSTOS 2006