2010-08-03 29 views
34

मैं सेल सरणी में खाली कोशिकाओं का पता कैसे लगा सकता हूं? मुझे पता है कि खाली सेल को हटाने के लिए कमांड a(1) = [] है, लेकिन मुझे लगता है कि कौन सी कोशिकाएं खाली हैं, यह स्वचालित रूप से MATLAB प्राप्त नहीं कर पाती है।मैं सेल सरणी में खाली कोशिकाओं का पता कैसे लगा सकता हूं?

पृष्ठभूमि: मैंने a=cell(1,53) का उपयोग कर सेल सरणी को प्रीलोकेट किया। तो मैं एक फ़ाइल के लिए जाँच करने के लिए, और में इसे पढ़ा if exist(filename(i)) और textscan इस्तेमाल किया। परिणामस्वरूप, filename(i), मौजूद नहीं है एक खाली सेल परिणाम और हम अगले फ़ाइल पर ले जाते हैं।

जब मैं सभी फाइलों में पढ़ने समाप्त हूँ, मैं a के रिक्त कक्षों को नष्ट करना चाहते हैं। मैंने कोशिश की if a(i)==[]

उत्तर

53

उपयोग CELLFUN

%# find empty cells 
emptyCells = cellfun(@isempty,a); 
%# remove empty cells 
a(emptyCells) = []; 

नोट: a(i)==[] काम नहीं करेगा। यदि आप जानना चाहते हैं कि i-th सेल खाली है, तो आपको सेल की सामग्री तक पहुंचने के लिए घुंघराले ब्रैकेट का उपयोग करना होगा। इसके अलावा, ==[] खाली करने के लिए, true/false के बजाय, तो आप बजाय कमांड isempty का उपयोग करना चाहिए मूल्यांकन करता है। संक्षेप में: a(i)==[]isempty(a{i}) के रूप में लिखा जाना चाहिए।

+15

'emptyCells = cellfun ('isempty', एक);' '... cellfun' एक आंतरिक' स्विच है 'कथन जो यह देखने के लिए जांच करता है कि स्ट्रिंग एक मुट्ठी भर कार्यों में से एक है जो यह "जादू" गति में वृद्धि कर सकती है ... यह यहां वर्णित है: http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill

+0

+1 कैसे रिक्त कक्षों को हटाने के लिए निर्दिष्ट करने के लिए! यह केवल गैर खाली प्रविष्टियों वाला कोई कक्ष सरणी के साथ छोड़ देता है! – Matteo

0

सभी उपरोक्त उत्तरों गलत हैं, क्योंकि मेरे मामले में जब मैंने उनका उपयोग किया, तो उन्होंने खाली कोशिकाओं को हटा दिया और फिर मेरे सेल सरणी के सभी तत्व अपने वास्तविक आकार को संरक्षित करने के बजाय एक पंक्ति तरीके से स्थित थे। वास्तव में इस तरह के दृष्टिकोण का उपयोग करने के बाद आपके सेल सरणी तत्व एक पंक्ति सेल वेक्टर होते हैं।

मैं इस दृष्टिकोण है जो मेरे मामले में ठीक से काम करता मिल गया है।

स्रोत: https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90

दृष्टिकोण:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), :) = []; 
गति उपयोग में मामूली सुधार के लिए