Reorder a matrix relative to another
2 views (last 30 days)
Show older comments
I have investigated all day the different ways to do this, and I have not been able to come up with a plan to achieve exactly what i need. Below are my sample matrices.
a=[5;20;50;30;10]
index=[1;2;3;4;5]
b=[10;50;5;20;50]
c=[44;22;11;88;55]
"a" and "index" are the proper order of the matrix. Matrix "b" is identical is size and shape, but the values are scrambled in order. I need a way to establish an order to move "b" to look like "a", and then apply that reordering pattern to "c". The only matrix i am interested in is the reordered "c"
In the end i want the new reordered matrix to be the following:
cReordered=[11;88;22;55;44]
I am looking for the most efficient way to do this.
I have used:
[bnew, ia, ib] = intersect(a, b, 'stable')
but it only reorders "b", by generating a "bnew". and this will match the pattern in "a", but that is all.
Any advice would be appreciated. thank you.
2 Comments
Accepted Answer
Stephen23
on 2 Mar 2015
Edited: Stephen23
on 2 Mar 2015
Assuming that the values in both of a and b are unique, and that they each contain exactly the same values, then the vector b original question needs have the second 50 replaced with a 30, like this:
>> a = [5;20;50;30;10];
>> x = [1;2;3;4;5];
>> b = [10;50;5;20;30];
>> c = [44;22;11;88;55];
>> [~,xx] = sort(a);
>> [~,yy] = sort(b);
>> d(xx) = c(yy)
d =
11 88 22 55 44
Which matches the desired output [11;88;22;55;44]. Note that this requires that the values in a and b are unique!
0 Comments
More Answers (0)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!