MATLAB:从向量中找到每个唯一编号的第一个位置

时间:2014-01-08 07:29:24

标签: arrays matlab vector element unique

我希望从矢量中找到每个唯一数字的第一个位置,但没有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]

非常感谢

1 个答案:

答案 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

请注意,如果Ab的尺寸达成一致,则向量b2中的每个数字必须至少出现两次(之前并非如此)你的编辑)。