2016-08-24 117 views
2

我有一個載體,我想找到是至少3次的連續0的塊的索引0的塊的索引。查找連續

y = [1 1 1 0 1 1 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 0 0 1 1]; 

所以在這種情況下,塊應該是7-9的[0 0 0]和20-23的[0 0 0 0]。輸出應該給我的指標,像[7,9]和[20,23],甚至更好,改變這些0塊到單個NAN成爲:

[1 1 1 0 1 1 NAN 1 1 1 0 1 0 1 0 0 1 NAN 1 1]  

謝謝!

+3

我不familar與MATLAB,但我覺得首先數組轉換爲字符串,然後將的preg_match「0 0 0 0 ....」到南,在翻譯回陣列。 –

+0

@KrisRoofe我也是這麼做的。在MATLAB中,我們使用'regexp'或'regexprep'。 – rayryeng

回答

8

你可以做的是:

  1. 墊與1兩邊的載體。
  2. 使用finddiff尋找到從1矢量變爲0(差異= -1)
  3. 使用finddiff尋找到從0矢量變爲1(差異= 1)
  4. 查找每個間隔的持續時間通過用2中的值減去3中的值(並加上1)
  5. 創建一個邏輯向量true其中持續時間爲>= 3,並使用該向量來查找開始索引(從找到的值點2)。
  6. 將各起始索引的值設置爲NaN
  7. 將值start indices + 1 : end indices設置爲[]

而你設置去!

它實際上是花了很多時間寫的解釋比它把寫的代碼。學習一些基本的MATLAB是相當不錯的練習,所以我會把它留給你。祝你好運!