查找每个值的最后一次出现的索引

时间:2012-07-06 15:11:44

标签: arrays matlab vector

我有这样的矢量:

>> v = [1 1 1 2 2 3 4 4 4 4 4 5 5]'

v =

     1
     1
     1
     2
     2
     3
     4
     4
     4
     4
     4
     5
     5

对矢量进行排序。每个值可以有任意数量。我需要找到每个值的最后一次出现的索引。在这种情况下,它会返回:

answer =

     3    % index of the last occurence of "1"
     5    % index of the last occurence of "2"
     6    % index of the last occurence of "3"
    11    % index of the last occurence of "4"
    13    % index of the last occurence of "5"

3 个答案:

答案 0 :(得分:5)

感谢@trumpetlicks,答案是unique

>> v = [1 1 1 2 2 3 4 4 4 4 4 5 5 6]'

v =

     1
     1
     1
     2
     2
     3
     4
     4
     4
     4
     4
     5
     5
     6

>> [~, answer] = unique(v)

answer =

     3
     5
     6
    11
    13
    14

[编辑] 在更多的MCR版本(R2013?)中,unique的行为发生了变化。要获得相同的结果,您必须使用unique(v, 'legacy');

答案 1 :(得分:5)

v = [1 1 1 2 2 3 4 4 4 4 4 5 5];
find(v==1,1,'last')
 % returns ans = 3
find(v==2,1,'last')
 % returns ans = 5

1表示您要返回的出现次数,并且可以指定'first''last'

答案 2 :(得分:1)

试试这个

[find(diff(v')) length(v)]

你应该能够自己搞清楚。