我在我的一个项目中使用 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
等等。
当然,我可以通过编写一个简单的循环来完成。我想知道是否有更优雅(矢量化)的方法来解决这个问题。我在考虑像前缀一些这样的东西,但是,到目前为止还没有运气。
谢谢,
阿尼尔。
最佳答案
diff 函数非常适合这类东西,而且速度非常快。
temp = diff(A);
Starts = find([A(1) == 0, temp==-1]);
Ends = find([temp == 1,A(end)==0])
编辑:修复了新手捕获的 Ends 计算错误。
关于arrays - 零一矩阵中零范围的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5445512/