# find ID's of repeated values in array

6 views (last 30 days)
Kim Arnold on 17 Sep 2021
Commented: Kim Arnold on 17 Sep 2021
Let's say I have 2 arrays, one longer t1 (1x15 double) and a shorter one t2(1x8 double) and I tried to find the indices of t1 in the t2 as follows:
t1=[1,2,3,3,3,4,5,6];
t2=[1,1.5,2,3,4,5,6,7,8,9,9.5,19,25,31,42];
IDt1_int2=ismember(t2,t1)
>> ismember(t2,1)
ans =
1×15 logical array
1 0 1 1 1 1 1 0 0 0 0 0 0 0 0
but what I acutally wanted is something like this
IDt1_int2=find(ismember(t2,t1));
find(ismember(t2,t1))
ans =
1 3 4 5 6 7
but what i want it to give as an ouput is an array of IDs which considers the numbeer 3 in my t1 three times like this
[1 3 4 4 4 5 6 7];
Could you help here? Thank you
Stephen23 on 17 Sep 2021
Edited: Stephen23 on 17 Sep 2021
The simple MATLAB approach:
t1 = [1,2,3,3,3,4,5,6];
t2 = [1,1.5,2,3,4,5,6,7,8,9,9.5,19,25,31,42];
[~,idx] = ismember(t1,t2) % note the order!
idx = 1×8
1 3 4 4 4 5 6 7
Don't waste your time calling ISMEMBER multiple times in an inefficient loop.
Kim Arnold on 17 Sep 2021
Thank you very much Stephen.
Yes I tried it with
[~,idx] = ismember(t2,t1)
which was the wrong order to give the inputs.

Simon Chan on 17 Sep 2021
You may use a for loop as follows:
idx = zeros(1,length(t1));
for k = 1:length(t1)
idx(k) = find(ismember(t2,t1(k)));
end
Kim Arnold on 17 Sep 2021
Dear Simon,
Thanks that works perfectly fine!

KSSV on 17 Sep 2021
[c,ia] = ismember(t2,t1)
Kim Arnold on 17 Sep 2021
Edited: Kim Arnold on 17 Sep 2021
thank you, but this does not give me what I want as I described above it just gives me besides the logical also the location. but what I want is an output as: [1 3 4 4 4 5 6 7]; where it tells me that the number 3 of t1 is at position 4 in t2, three times because i need later to extract those positions again for plotting.
Kim Arnold on 17 Sep 2021
What you wrote was correct when it was first t1 and then t2 :) however, thank you for the input
[c,ia] = ismember(t1,t2)