संक्षिप्त उत्तर: बिल्ट-इन फ़ंक्शन arrayfun
वैसा ही करता है जैसा आपका map
फ़ंक्शन सांख्यिक सरणियों के लिए करता है:
>> y = arrayfun(@(x) x^2, 1:10)
y =
1 4 9 16 25 36 49 64 81 100
दो अन्य अंतर्निहित कार्य हैं जो समान व्यवहार करते हैं: cellfun
(जो सेल सरणियों के तत्वों पर संचालित होता है) औरstructfun
(जो एक संरचना के प्रत्येक क्षेत्र पर संचालित होता है)।
हालांकि, ये कार्य अक्सर आवश्यक नहीं होते हैं यदि आप वेक्टराइजेशन का लाभ उठाते हैं, विशेष रूप से तत्व-वार अंकगणितीय ऑपरेटरों का उपयोग करते हुए । आपके द्वारा दिए गए उदाहरण के लिए, एक वेक्टरकृत समाधान होगा:
>> x = 1:10;
>> y = x.^2
y =
1 4 9 16 25 36 49 64 81 100
कुछ ऑपरेशन स्वचालित रूप से तत्वों के पार संचालित होंगे (जैसे कि वेक्टर के लिए एक स्केलर मान जोड़ना) जबकि अन्य ऑपरेटरों के पास तत्व-वार ऑपरेशन ( .
ऑपरेटर से पहले द्वारा चिह्नित ) के लिए एक विशेष वाक्यविन्यास है । MATLAB में कई अंतर्निहित फ़ंक्शन तत्व-वार संचालन का उपयोग करके वेक्टर और मैट्रिक्स तर्कों पर काम करने के लिए डिज़ाइन किए गए हैं (अक्सर किसी दिए गए आयाम पर लागू होते हैं, जैसे sum
औरmean
उदाहरण के लिए), और इस प्रकार मानचित्र कार्यों की आवश्यकता नहीं होती है।
संक्षेप में, प्रत्येक तत्व को एक ऐरे में वर्गाकार करने के कुछ अलग तरीके हैं:
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 सबसे समझदार (और कुशल) विकल्प है।