查找数组更改的索引

时间:2015-10-12 00:00:02

标签: matlab

我有一个像这样的数组:

[0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 ... ]

我想找到0变为1的索引,1变为0.因此对于以下数组:

changes = [5 10 14 17 20]

我知道如何使用find和像find(A > 3)这样的矢量谓词表达式来搜索更简单的条件,但这让我感到困惑。我可以编写一个大循环并执行它,但我觉得必须有内置的东西或者更容易实现相同的东西。

3 个答案:

答案 0 :(得分:5)

一个非常简单的方法,它适用于所有值作为开始:

changes = find(diff(value))+1;

这也将返回预期结果changes = [5 10 14 17 20]

答案 1 :(得分:2)

找出解决方案。

find(circshift(value, [0, 1]) ~= value)

对于我的应用程序,数组保证以0开始和结束,否则它将无法正常工作。

答案 2 :(得分:0)

Dennis K的解决方案适用于您的二进制数据。如果您希望一般找到过渡,我建议运行长度编码。我不认为MATLAB有内置的,但是(无耻的插件),你可以使用seqle