我正在为我的一个项目使用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/

10-11 04:24