我有一个像这样的数组:
[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)
这样的矢量谓词表达式来搜索更简单的条件,但这让我感到困惑。我可以编写一个大循环并执行它,但我觉得必须有内置的东西或者更容易实现相同的东西。
答案 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。