2010-08-03 31 views
34

Hücre dizisindeki boş hücreleri nasıl algılayabilirim? Boş hücreyi kaldırma komutu a(1) = [] olduğunu biliyorum, ancak MATLAB'ın hangi hücrelerin boş olduğunu otomatik olarak algılayamam.Hücre dizisindeki boş hücreleri nasıl algılayabilirim?

Arka plan: a=cell(1,53) kullanarak bir hücre dizisini önceden tahsis ettim. Sonra if exist(filename(i)) kullandım ve bir dosyayı kontrol etmek için metinleri tarayabilir ve okuyabilir. Sonuç olarak, filename(i) yok olduğunda boş bir hücre oluşur ve bir sonraki dosyaya gideriz.

Tüm dosyalarda okumayı bitirdiğimde, a boş hücrelerini silmek istiyorum. a(i)==[] çalışmaz: Ben CELLFUN

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

Not if a(i)==[]

cevap

53

kullanın çalıştı. Eğer i-th hücresinin boş olup olmadığını bilmek istiyorsanız, hücrenin içeriğine erişmek için küme parantezleri kullanmalısınız. Ayrıca, ==[], true/false yerine boş olarak değerlendirilir, bu nedenle isempty komutunu kullanmalısınız. Kısaca: a(i)==[], isempty(a{i}) olarak yeniden yazılmalıdır.

+15

'emptyCells = cellfun ('IsEmpty', a) '' ... 'cellfun' bir iç' anahtarı vardır dize, "sihirli" bir hız artışı yapabileceğini bir dizi işlevden biri olup olmadığını kontrol eden bir deyim ... Bu burada açıklanmıştır: http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill

+0

+1 boş hücrelerin nasıl silineceğini belirtmek için! Bu sadece boş olmayan girişleri içeren bir hücre dizisi ile kalıyor! – Matteo

0

Yukarıda bahsedilen tüm cevaplar yanlıştır, çünkü onları kullandığımda, boş hücreleri çıkardıktan sonra hücre dizilimimin tüm öğeleri gerçek şeklini korumak yerine sıralı bir şekilde yerleştirilir. Aslında bu tür bir yaklaşım kullandıktan sonra hücre dizisi elemanlarınız bir satır hücre vektörü olma eğilimindedir.

Durumumda doğru çalışan bu yaklaşımı buldum.

kaynağı https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90

yaklaşım: hız kullanımda hafif bir iyileşme için

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), :) = []; 
İlgili konular