How to find the indeces of same values within two vectors with repetitive values?
    24 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Valentina Mazzoni
 el 13 de Mayo de 2020
  
Hi all,
I've got two vectors:
A=[1000 2000 2000 5000 20000 20000]; 
B=[1000 2000 2000 5000 10000 20000 20000 60000 60000 60000 60000 0 0 0 0 0 0 0 0 0 0 0 0 0];
and I want to find the indeces of the elements of B that appears also in A.
I've tried this: 
[~,idx]=ismember(A,B); 
and it gives me idx=[1 2 2 4 6 6] but I want idx to be [1 2 3 4 6 7].
The problem is given by the repetitive values but I don't know how to fix it. Any ideas? Thanks in advance.
0 comentarios
Respuesta aceptada
  Stephen23
      
      
 el 13 de Mayo de 2020
        
      Editada: Stephen23
      
      
 el 13 de Mayo de 2020
  
      The example data from your question:
>> A = [1000,2000,2000,5000,20000,20000];
>> B = [1000,2000,2000,5000,10000,20000,20000,60000,60000,60000,60000,0,0,0,0,0,0,0,0,0,0,0,0,0];
>> X = A(:)==B; % requires MATLAB >=R2016b, for earlier versions replace == with BSXFUN.
>> [~,Y] = find(X & cumsum(X,2)==cumsum(X,1))
Y =
   1
   2
   3
   4
   6
   7
>> A = [500,500,5000];
>> B = [250,500,500,1250,2500,5000,5000,15000,15000,15000,15000,8166,8926,9796,10800,11967,13333,14948,16875,16875,19200,22041,22041,25562];
>> X = A(:)==B; % requires MATLAB >=R2016b, for earlier versions replace == with BSXFUN.
>> [~,Y] = find(X & cumsum(X,2)==cumsum(X,1))
Y =
   2
   3
   6
2 comentarios
Más respuestas (2)
  Mario Malic
      
 el 13 de Mayo de 2020
        Values=ismember(B,A) % Will return true/false for each value of B found in A
Ind_Values = Values .* [1:1:length(B)] % Multiply it by a vector to get actual indices from B
Ind_Values = nonzeros(Ind_Values)' % Remove zeros 
Certainly, there is more elegant way to do this.
3 comentarios
  Mario Malic
      
 el 13 de Mayo de 2020
				
      Editada: Mario Malic
      
 el 13 de Mayo de 2020
  
			Akihumi's answer is great. Maybe you can add if condition to his code to remove extra numbers?
Another suggestion is a function intersect, but it requires that matrix A does not have the same values, otherwise it will not work as you want.
[C,ia,ib] = intersect(A,B) %ib contains indices in B
Ver también
Categorías
				Más información sobre Matrix Indexing en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!