我希望从矢量中找到每个唯一数字的第一个位置,但没有for循环:
e.g
a=[1 1 2 2 3 4 2 1 3 4];
我可以通过以下方式获得唯一号码:
uniq=unique(a);
其中uniq = [1 2 3 4]
我想要的是获得每个号码的第一个出现位置,任何想法????
first_pos = [1 3 5 6]
其中1首先出现在位置1中,4首先出现在矢量
的第六个位置另外,第二次出场的位置怎么样?
second_pos = [2 4 9 10]
非常感谢
答案 0 :(得分:3)
使用unique
的第二个输出,并使用'first'
选项:
>> A = [1 1 2 2 3 4 2 1 3 4];
>> [a,b] = unique(A, 'first')
a =
1 2 3 4 %// the unique values
b =
1 3 5 6 %// the first indices where these values occur
要查找第二次出现的位置,
%// replace first occurrences with some random number
R = rand;
%// and do the same as before
A(b) = R;
[a2,b2] = unique(A, 'first');
%// Our random number is NOT part of original vector
b2(a2==R)=[];
a2(a2==R)=[];
用这个:
b2 =
2 4 9 10
请注意,如果A
和b
的尺寸达成一致,则向量b2
中的每个数字必须至少出现两次(之前并非如此)你的编辑)。