如何在MATLAB中找到向量的段索引?

时间:2014-12-03 23:47:31

标签: matlab vector indexing

假设我有一个包含person_ids的向量,如下所示:

x = [1,1,1,2,2,3,3,3,3,4]

所以前三项是针对人1.如何找到新人开始的矢量索引?

即。我的函数应该返回

f(x) = [1,4,6,10];

有没有MATLAB方法呢?

2 个答案:

答案 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或更高版本,那么您不必担心这一点......但是如果您有更旧的东西,那就要记住了。