MATLAB

2012-03-14 24 views
7

में रिक्त कक्षों को हटाएं मैं एक मैटलैब सेल सरणी के नीचे सभी रिक्त कक्षों को हटाना चाहता हूं। हालांकि, मैंने पाया कि सभी कोड उदाहरण वेक्टर के लिए मैट्रिक्स को संकुचित करते हैं, जो मैं नहीं चाहता हूं।MATLAB

तो यह कोड इस सदिश

में

a = { 1, 2; 3, 4; [], []} 
emptyCells = cellfun('isempty', a); 
a(emptyCells) = [] 

परिणाम एक [1] [3] [2] [4]

लेकिन मैं बजाय इस सरणी चाहते =

ए =

[1] [2] 

[3] [4] 

मैं यह कैसे करूँगा?

उत्तर

15

आप अपने सेल सरणी जहां सभी सेल खाली हैं की सभी पंक्तियों को नष्ट करना चाहते हैं, तो आप उपयोग कर सकते हैं follwing:

a = { 1, 2; 3, 4; [], []} 
emptyCells = cellfun('isempty', a); 

a(all(emptyCells,2),:) = [] 

a = 
    [1] [2] 
    [3] [4] 

कारण यह अपने निर्माण में काम नहीं किया है कि यदि आप सूचकांक एक सरणी के साथ, आउटपुट को वेक्टर में दोबारा बदल दिया जाता है (क्योंकि इस बात की कोई गारंटी नहीं है कि पूरी पंक्तियां या कॉलम हटा दिए जाएंगे, न कि केवल व्यक्तिगत तत्वों को)।

1

यह मेरे लिए काम करता है:

a = { 1, 2; 3, 4; [], []}; 
emptyCells = cellfun('isempty', a); 
cols = size(a,2); 
a(emptyCells) = []; 
a = reshape(a, [], cols); 

लेकिन मुझे यकीन है कि अगर यह आप के लिए पर्याप्त रूप से सामान्य हो जाएगा नहीं कर रहा हूँ - आप हमेशा अपने सरणी के निचले भाग में रिक्त कक्षों की पूरी पंक्तियों होगा?

+0

वर्तमान में हाँ, लेकिन आम तौर पर मुझे यकीन नहीं है। मैं भी reshape का उपयोग करने के बारे में सोच रहा था, लेकिन अंत में मैंने आखिरी पंक्ति के लिए एक साधारण खोज का उपयोग खाली नहीं किया है, क्योंकि मुझे वह कोड मिलता है जिसे आपने बहुत जटिल या अचूक कार्य पोस्ट किया था। –

0

बहुत आपकी समस्या के लिए विशिष्ट एक अधिक आसान समाधान सीधे एक मैट्रिक्स में सेल कन्वर्ट करने के लिए है:

cleanedA = cell2mat(a); 

यह एक सामान्य मैट्रिक्स में बदलता है, और जब तक यह कर यह रिक्त कक्षों को हटा।

तो जाहिर है, आप इसे निम्न आदेश के साथ एक सेल सरणी के लिए reconvert कर सकते हैं:

a = mat2cell(cleanedA, [1 1], [1 1]) 

इसका सामान्य नहीं है, लेकिन उदाहरण के लिए यह आसान समाधान मैं के बारे में सोच सकता है पोस्ट।

+0

वास्तव में मेरे सेल सरणी में मुख्य रूप से तार होते हैं, इसलिए सेल 2mat मेरे लिए उपयोगी नहीं है। –

1

एक ऐसा फ़ंक्शन है जो सेल से विशिष्ट पंक्ति/कॉलम को हटाने का सामान्यीकृत करता है, जिसे fun_removecellrowcols कहा जाता है। हटाने के कारण, सेल आयाम का आकार बदल गया है।