2011-10-21 16 views
6

अगर कोई मुझे ऐसा करने का आसान तरीका दिखाता है तो मैं सराहना करता हूं। मान लीजिए कि मैं की तरहलगातार संख्याओं की श्रृंखला (विभिन्न लंबाई)

d = [3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2] 

मैं लगातार संख्या "दुक्की" और उन श्रृंखला की लंबाई की श्रृंखला लगाना चाहते हैं MATLAB में एक सदिश करते हैं।

संख्या twos आसानी से x=find(d==2) द्वारा पाई जा सकती है।

[1 3 1 5 1]. 

जो कोई मेरी मदद कर सकता है: लेकिन क्या मैं चाहता हूँ एक वेक्टर जो लगातार संख्या दुक्की के सभी श्रृंखला की लंबाई में शामिल है, जिसका मतलब है कि इस मामले में मेरी परिणाम इस तरह एक सदिश होगा प्राप्त करने के लिए है?

+0

संबंधित प्रश्न: [MATLAB: अनुक्रम में शून्यों के द्वीप ढूंढना] (http://stackoverflow.com/questions/3274043/matlab-finding-islands-of-zeros-in-a-sequence) – Amro

उत्तर

9

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

q = diff([0 d 0] == 2); 
v = find(q == -1) - find(q == 1); 

v = 

    1 3 1 5 1 

देता है मुझे

+0

बहुत अच्छा। ------- –

+0

बहुत बहुत धन्यवाद, यह मेरी समस्याओं को हल करने लगता है! :) – alex

+0

क्या होगा अगर वी वेक्टर नहीं है और गतिशील है? यदि सफलता की संख्या लगातार 5 है तो जीत? क्या आप @MAX – pac

6

के लिए यह रन लंबाई एन्कोडिंग कहा जाता है। http://www.mathworks.com/matlabcentral/fileexchange/4955-rle-deencoding पर इसके लिए एक अच्छी एम-फाइल उपलब्ध है। यह विधि आमतौर पर पहले पोस्ट किए गए diff/find way से अधिक तेज़ है।

tic 
d_rle = rle(d==2); 
d_rle{2}(d_rle{1}==1); 
toc 

विलुप्त समय 0.002632 सेकंड है।

tic 
q = [0 diff([0 d 0] == 2)]; 
find(q == -1) - find(q == 1); 
toc 

विलुप्त समय 0.003061 सेकंड है।

+0

Yep - rle() में केवल एक कॉल खोजने के लिए() है, और ढूंढें() बहुत धीमी है – Max

+0

@ मैक्स साफ ... मैंने कभी यह पता लगाने के लिए इसे खोला नहीं है। धन्यवाद! –

+0

इस उत्तर के लिए भी धन्यवाद :)! – alex

-1

क्या होगा यदि हम मूल मैट्रिक्स के सूचकांक चाहते हैं जहां लगातार मूल्य स्थित हैं? इसके अलावा, क्या होगा यदि हम मूल मैट्रिक्स के समान आकार के मैट्रिक्स चाहते हैं, जहां लगातार मूल्यों की संख्या लगातार मूल्यों के सूचकांक में संग्रहीत की जाती है? उदाहरण के लिए:

original_matrix = [1 1 1;2 2 3; 1 2 3]; 

    output_matrix = [3 3 3;2 2 0;0 0 0]; 

इस समस्या में मौसम संबंधी डेटा गुणवत्ता नियंत्रण के लिए प्रासंगिकता है। उदाहरण के लिए, यदि मेरे पास कई सेंसर से तापमान डेटा का मैट्रिक्स है, और मैं जानना चाहता हूं कि किस दिन लगातार निरंतर मूल्य थे, और कितने दिन स्थिर थे, इसलिए मैं डेटा को संभवतः दोषपूर्ण रूप से ध्वजांकित कर सकता हूं।

तापमान मैट्रिक्स स्टेशनों की संख्या x संख्याओं की संख्या है और मैं एक आउटपुट मैट्रिक्स चाहता हूं जो कि दिनों की संख्या x संख्याओं की संख्या है, जहां ऊपर वर्णित अनुसार लगातार मूल्यों को ध्वजांकित किया गया है।

संबंधित मुद्दे