MATLAB

2011-08-09 13 views
5

में सेल सरणी के तार्किक अनुक्रमण मैंMATLAB

myCellArray = myCcellArray{indices} 

जहां सूचकांक सिर्फ 0 और 1 रों है, myCellArray में पंक्तियों की संख्या के रूप में तत्वों की एक ही नंबर के साथ क्या करना चाहते हैं, लेकिन यह काम नहीं करता । मुझे क्या करना चाहिए?

उत्तर

11

आपको इंडेक्सिंग करने के लिए घुंघराले ब्रेसिज़ के बजाय ब्रांड्स का उपयोग करने की आवश्यकता है।

>> arr = cell(2,2); 
>> arr{1,1} = magic(4); 
>> arr{1,2} = 'Hello'; 
>> arr{2,1} = 42; 
>> arr{2,2} = pi; 
>> arr 

arr = 

    [4x4 double] 'Hello' 
    [  42] [3.1416] 

>> idx = logical(zeros(2,2)); 
>> idx(1,1) = true; 
>> idx(2,2) = true; 
>> arr(idx) 

ans = 

    [4x4 double] 
    [ 3.1416] 
1

यदि आप सेल-सरणी को टुकड़ा करना चाहते हैं, तो ब्रांड्स का उपयोग करें। उदाहरण:

%# random cellarray of strings, and a logical indices vector 
myCcellArray = cellstr(num2str((1:10)','value %02d')); %' 
indices = rand(size(myCcellArray)) > 0.5; 

%# slicing 
myCellArray = myCcellArray(indices) 
0

क्या एमरो सही कहा गया है, आपको कोष्ठक का उपयोग करना चाहिए।

लेकिन एक और महत्वपूर्ण बात यह है कि बुलियन का उपयोग संख्यात्मक 1 और 0 नहीं है।

ताकि आप संख्या

I = [0 0 0 1 0 1] 

आप इसे सूचकांक को

myCellArray(I~=0) 

का उपयोग करना चाहिए है। उलझन में, एक बुलियन सरणी को मैटलैब में एक और शून्य के रूप में प्रदर्शित किया जाता है, हालांकि इसे आंतरिक रूप से अलग-अलग दर्शाया जाता है।

+2

तकनीकी रूप से, एक लॉजिकल सरणी आंतरिक रूप से एक यूंट 8 सरणी और शून्य (एक बाइट प्रति तत्व, 0x00 या 0x01 पर सेट) के समान होती है। इसमें सिर्फ एक अलग डेटाटाइप ध्वज है, इसलिए यह अलग-अलग _interpreted_ है। आप MEX फ़ंक्शन में दो सरणी प्रकारों की जांच करने के लिए 'mxGetElementSize' और' mxGetData' का उपयोग करके इसे सत्यापित कर सकते हैं। –