2010-04-29 7 views
8

संभावित डुप्लिकेट:
How do I do multiple assignment in MATLAB?क्या सामान्य MATLAB सरणी के लिए सौदा() कुछ भी है?

सेल सरणी से निपटने पर, मैं xxx29 फ़ंक्शन का उपयोग आउटपुट चर के लिए कोशिकाओं को असाइन करने के लिए कर सकता हूं, जैसे:

[a, b, c] = deal(myCell{:}); 

या बस:

[a, b, c] = myCell{:}; 

मैं एक साधारण सरणी के लिए एक ही चीज़ करना चाहता हूं, जैसे:

myArray = [1, 2, 3]; 
[a, b, c] = deal(myArray(:)); 

लेकिन यह काम नहीं करता है। विकल्प क्या है?

+4

मैंने सोचा था कि इस सवाल का परिचित लग रहा था, लेकिन यह मुझे डुप्लिकेट को खोजने के लिए कुछ समय लिया: http://stackoverflow.com/questions/2337126/multiple-assignment- इन-matlab। मुझे लगता है कि जब मुझे मौका मिलता है तो मैं इन सवालों को बेहतर तरीके से टैग करने की कोशिश करूंगा। – gnovice

उत्तर

9

एक विकल्प के लिए एक सेल सरणी पहले NUM2CELL का उपयोग करने के अपने सरणी परिवर्तित करने के लिए है:

myArray = [1, 2, 3]; 
cArray = num2cell(myArray); 
[a, b, c] = cArray{:}; 

आप ध्यान दें के रूप में, तुम भी DEAL उपयोग करने के लिए कक्ष सामग्री वितरित करने के लिए की जरूरत नहीं है।

+1

क्या यह एक लाइनर नहीं है? '[ए, बी, सी] = num2cell (myArray) {:}' – mtrw

+0

@mtrw: नहीं, यह त्रुटि फेंकता है: '??? त्रुटि:() -इंडेक्सिंग इंडेक्स अभिव्यक्ति में आखिरी बार दिखाई देनी चाहिए। – gnovice

+1

ओह दिलचस्प। यह ऑक्टेव में काम करता है। मुझे लगता है कि एफओएसएस संस्करण एक अस्थायी चर खरीदने के लिए बर्दाश्त नहीं कर सकता है। – mtrw

0

बहुत सुंदर नहीं है, लेकिन:

myArray = 1:3; 
c = arrayfun(@(x) x, myArray , 'UniformOutput', false); 
c{:} 
+1

वास्तव में, स्क्रैच करें कि, 'arrayfun' कॉल मूल रूप से 'num2cell' जैसा ही काम करता है। –

+1

यहां छोटे सरणी/सेल/एक्सफुन कॉल के लिए एक चाल है: 'वर्दीऑटपुट' की बजाय, झूठी, आप बस अपना अनाम फ़ंक्शन एक सेल वापस कर सकते हैं। सी = arrayfun (@ (x) {x}, myArray) –