2016-08-24 84 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是相当不错的练习,所以我会把它留给你。祝你好运!