मैं सेल सेल में प्रत्येक सेल में फ़ंक्शन लागू करने के लिए cellfun
का उपयोग कर रहा हूं।{} ऑपरेटर के साथ फ़ंक्शन को 'यूनिफॉर्मऑटपुट' का वैध प्रतिस्थापन, सेलफन में गलत लपेट रहा है?
मुझे पता है कि जब भी फ़ंक्शन गैर-स्केलर मान देता है तो मुझे 'UniformOutput'
से false
सेट करना होगा, ताकि फ़ंक्शन के आउटपुट को सेल सरणी में encapsulated वापस कर दिया जाए।
एक उदाहरण के रूप में निम्नलिखित सेल सरणी लें:
C1 = {[1 2 3], [4 5 6]};
C1
दो कोशिकाएं होती हैं और प्रत्येक कोशिका तीन तत्वों का एक वेक्टर शामिल हैं:
C1 =
1×2 cell array
[1×3 double] [1×3 double]
अगर मैं सामग्री के 1
जोड़ना चाहते हैं प्रत्येक सेल में, मैं @(x) x + 1
फ़ंक्शन को परिभाषित कर सकता हूं और cellfun
का उपयोग करके इसे लागू कर सकता हूं:
C2 = cellfun(@(x) x + 1, C1, 'UniformOutput', false);
यह बहुत अच्छा काम करता है, लेकिन ध्यान दें कि मुझे यह सुनिश्चित करने की ज़रूरत है कि 'UniformOutput'
false
पर सेट है जैसा कि मैंने पहले बताया था, अन्यथा एक त्रुटि फेंक दी जाएगी।
हालांकि, this thread पढ़ने के बाद, मुझे एहसास हुआ कि अगर मैं cell array construction operator {}
इस तरह के साथ समारोह लपेट @(x) {x + 1}
तो मैं false
को 'UniformOutput'
निर्धारित करने की आवश्यकता नहीं है।
तो निम्न आदेश किसी भी त्रुटि फेंक बिना C2
में के रूप में एक ही परिणाम उत्पन्न करेगा:
C3 = cellfun(@(x) {x + 1}, C1);
कोड लेआउट मैं इस दृष्टिकोण पसंद करते हैं, क्योंकि यह अधिक कॉम्पैक्ट और पूर्व की तुलना में कम वर्बोज़ है के संदर्भ में, लेकिन मुझे यकीन नहीं है कि यह हमेशा सुरक्षित है या नहीं।
इस प्रकार मेरे सवाल है:
मैं हमेशा {}
साथ समारोह लपेट कर सकते हैं false
को 'UniformOutput'
स्थापित करने से बचने के लिए? या क्या ऐसे कोई परिदृश्य हैं जहां ऐसे प्रतिस्थापन काम नहीं करेंगे?
मेरे शोध:
help cellfun
'UniformOutput'
- किसी तार्किक मान का संकेत है या नहीं,FUN
की उत्पादन (रों) एक सेल सरणी में कैप्सूलीकरण बिना वापस किया जा सकता। यदिtrue
(डिफ़ॉल्ट),FUN
को स्केलर मान वापस करना होगा जो को किसी सरणी में सम्मिलित किया जा सकता है। यदिtrue
, आउटपुट निम्न प्रकारों का होना चाहिए: संख्यात्मक, तार्किक, चार, संरचना, सेल। यदिfalse
,cellfun
एक सेल सरणी (या एकाधिक सेल सरणी), देता है जहां (I, J, ...) th सेल में मान FUN (C {I, J, ...}, ...) है । जब'UniformOutput'
false
है, तो आउटपुट किसी भी प्रकार का हो सकता है।
निम्नलिखित टुकड़ा एक संबंधित सवाल का an answer का हिस्सा है:
[...]
cellfun
भिन्नता आपरेशन जो एक सेल के अलग-अलग तत्वों के बारे में विस्तृत संचालन करने के लिए आवश्यक है का ख्याल रखता है जब पाशन (जो है,{}
) [...]
वाह .. मुझे नहीं पता था कि 'सेलफन' के साथ कई आउटपुट कैप्चर करना भी संभव था। यह एक प्रबुद्ध जवाब है! धन्यवाद :) – codeaviator