Sort one set of data to correspond to another.
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ronan
el 16 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]
0 comentarios
Respuesta aceptada
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
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.
Más respuestas (2)
Guillaume
el 16 de Nov. de 2015
x = [350,420,245,100]
k = [420,100,350,245]
z = ismember(x, k)
0 comentarios
Ver también
Categorías
Más información sobre Shifting and Sorting Matrices 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!