Sort one set of data to correspond to another.

2 visualizaciones (últimos 30 días)
Ronan
Ronan el 16 de Nov. de 2015
Editada: Stephen23 el 17 de Nov. de 2015
Say I have an ordered set of data.
a = [100,200,300,400,500];
And say I have another set of data,
b = [300,200,500,400,100]
I m trying to find the index where a is sorted to b. I could use a nested for loop of course but is there a better way to get the index shown below?
c = [5,2,1,4,3]

Respuesta aceptada

Thorsten
Thorsten el 16 de Nov. de 2015
Editada: Thorsten el 16 de Nov. de 2015
If b is an unsorted version of a, i.e., all elements in b occur once and only once in a, you can use
[~, idx] = sort(b);
In the more general case where b can have some elements of a, and elements can occur more than once, use
for i=1:numel(b), idx(i) = find(ismember(a, b(i))); end
Instead of the for loop, you can also use
idx = arrayfun(@(x) find(ismember(a,x)), b);
  4 comentarios
Ronan
Ronan el 16 de Nov. de 2015
Thank you very much.
Guillaume
Guillaume el 16 de Nov. de 2015
Editada: Guillaume el 16 de Nov. de 2015
z = arrayfun(@(i) find(ismember(k,i)), x)
Is actually not going to work in the general case, because find may return none or several indices, which would then require a 'UniformOutput', false to arrayfun.
If you assume that find is always going to return one and only one value. Then the second output of ismember is a much more efficient way (no loop) to obtain the same result.

Iniciar sesión para comentar.

Más respuestas (2)

Stephen23
Stephen23 el 16 de Nov. de 2015
Editada: Stephen23 el 17 de Nov. de 2015
>> a = [100,200,300,400,500];
>> b = [300,200,500,400,100];
>> [~,Xa] = sort(a);
>> [~,Xb] = sort(b);
>> Xa(Xb)
ans =
5 2 1 4 3

Guillaume
Guillaume el 16 de Nov. de 2015
Following your comment to Thorsten's answer, use the 2nd return value of ismember:
x = [350,420,245,100]
k = [420,100,350,245]
z = ismember(x, k)

Categorías

Más información sobre Shifting and Sorting Matrices en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by