我正在为我的一个项目使用Matlab事实上,从现在起我就陷入了困境。尝试过在谷歌上搜索,但没有多少成功。
我有一个0和1的数组。比如:
A = [0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0];
我要提取一个索引数组:
[x_1, x_2, x_3, x_4, x_5, ..]
因此
x_1
是第一个零范围开始的索引。x_2
是第一个零范围结束的索引。x_3
是第二个零范围开始的索引x_4
是第二个零范围结束的索引。对于以上示例:
x_1 = 1, x_2 = 3
x_3 = 9, x_4 = 10
等等。
当然,我可以通过编写一个简单的循环来完成。我想知道是否有更优雅(矢量化)的方法来解决这个问题。我在想一些类似前缀的东西,但是,到现在为止还没有运气。
谢谢,
安尼尔。
最佳答案
如果你想在一个单一的向量中得到你的结果,就像你上面描述的那样(即x = [x_1 x_2 x_3 x_4 x_5 ...]
),那么你可以使用函数DIFF来执行二阶差分,并找到大于0的点:
x = find(diff([1 A 1],2) > 0);
编辑:
当每一串零中至少有2个零时,上述方法适用如果您将在
A
中出现单个零,则可以对上面的内容进行修改,以便像这样处理它们:diffA = diff([1 A 1],2);
[~,x] = find([diffA > 0; diffA == 2]);
在这种情况下,单个零值将在
x
中创建重复索引(即,如果A
以单个零值开始,则x(1)
和x(2)
都将为1)。关于arrays - 零一矩阵中零范围的指标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5445512/