arrays - 零一矩阵中零范围的索引

标签 arrays algorithm matlab

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

相关文章:

python - 将一行插入 NumPy 数组

java 一维字符串转多维

javascript - 如何在 JavaScript 中转换和重新排序数组?

algorithm - 大量小数据集的关联挖掘

java - 检测图像中的物体(单词)

c++ - 如何在 C++ 中使用数组演示内存错误

python - 如何对排列进行排序,使每个排列中至少有 1 个元素恰好相差 1

algorithm - 两个背包的 0-1 背包问题的反例

matlab - 广义矩阵积

matlab - Matlab 中的 Char(非 ascii)