查找连续的0的块的索引

时间:2016-08-24 03:06:54

标签: arrays matlab

我有一个向量,我想找到连续至少3次的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]    

谢谢!

1 个答案:

答案 0 :(得分:8)

你能做的是:

  1. 在每侧填充1的向量。
  2. 使用finddiff查找向量从1变为0的位置(diff = -1)
  3. 使用finddiff查找向量从0变为1(diff = 1)的位置
  4. 通过将值中的值减去2(并添加1)来查找每个间隔的持续时间
  5. 创建一个true的逻辑向量,其持续时间为>= 3,并使用该向量查找起始索引(来自第2点中的值)。
  6. 将每个开始索引的值设置为NaN
  7. start indices + 1 : end indices的值设为[]
  8. 你准备好了!

    编写解释实际上花了很多时间而不是编写代码。学习一些基本的MATLAB是一个非常好的练习,所以我会留给你。祝你好运!