假设我有一个包含person_ids
的向量,如下所示:
x = [1,1,1,2,2,3,3,3,3,4]
所以前三项是针对人1.如何找到新人开始的矢量索引?
即。我的函数应该返回
f(x) = [1,4,6,10];
有没有MATLAB方法呢?
答案 0 :(得分:4)
假设人员ID已排序,且ID不能为负数,您可以使用
执行此操作>> x = [1,1,1,2,2,3,3,3,3,4];
>> find(diff([-1 x]))
ans =
1 4 6 10
答案 1 :(得分:2)
Praetorian的答案非常好,但是如果你想要另一种选择,你可以使用unique
的第二个输出。第二个输出确定特定输入序列的第一个唯一值的位置。
还假设人员ID已排序,您可以这样做:
[~,y,~] = unique(x)
y =
1
4
6
10
如果您在版本R2013a之前查看unique
documentation,它会用于查找数组中输入序列的最后唯一值的位置。现在已经改为R2013a的第一个位置......这是我的版本。因此,如果你有一个在R2013a之前的MATLAB版本,你需要将'first'
标志作为第二个参数添加到唯一。因此:
[~,y,~] = unique(x, 'first');
如果您有R2013a或更高版本,那么您不必担心这一点......但是如果您有更旧的东西,那就要记住了。