संक्षिप्त उत्तर:
>> y = arrayfun(@(x) x^2,1:10)
y =
1 4 9 16 25 36 49 64 81 100
दो अन्य में निर्मित कार्यों कि समान व्यवहार कर रहे हैं: CELLFUN (जो संचालित में निर्मित समारोह ARRAYFUN वास्तव में क्या आपके नक्शा समारोह संख्यात्मक सरणियों के लिए करता है सेल सरणी के तत्वों पर) और STRUCTFUN (जो संरचना के प्रत्येक क्षेत्र पर संचालित होता है)।
हालांकि, यदि आप वेक्टरेशन का लाभ उठाते हैं, तो विशेष रूप से तत्व-वार arithmetic operators का उपयोग करके इन कार्यों को अक्सर जरूरी नहीं है। उदाहरण आप दे दी है के लिए, एक vectorized समाधान होगा:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
कुछ आपरेशन स्वचालित रूप से करते हैं जबकि अन्य ऑपरेटरों तत्व के लिहाज से आपरेशन के लिए एक विशेष वाक्य रचना है (एक वेक्टर के लिए एक अदिश मूल्य को जोड़ना) तत्वों भर में संचालित होगा (निरूपित किया ऑपरेटर से पहले "।" द्वारा। MATLAB में कई फ़ंक्शन तत्व-वार ऑपरेशंस का उपयोग करके वेक्टर और मैट्रिक्स तर्कों पर काम करने के लिए डिज़ाइन किए गए हैं, और इस प्रकार मानचित्र कार्यों की आवश्यकता नहीं है।
संक्षेप में, यहाँ एक सरणी में प्रत्येक तत्व वर्ग के लिए कुछ अलग तरीके हैं:
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
बेशक
, इस तरह के एक सरल ऑपरेशन के लिए, विकल्प # 1 सबसे समझदार विकल्प है।
सबक # 1 मैटलैब को अन्य भाषाओं से जा रहा: लूप का प्रयोग न करें, वे परिमाण एक vectorized समाधान की तुलना में धीमी के कुछ आदेश हैं। – CookieOfFortune
रिकर्सन के बारे में क्या? – Dario
जेआईटी की शुरूआत के साथ, लूप के लिए वे जुर्माना नहीं लेते हैं जो उन्होंने एक बार किया था। – MatlabDoug