permuting one matrix w.r.t. another matrix

1 visualizzazione (ultimi 30 giorni)
I have two large matrices a and b. for instance
a=[1 2 3;4 5 6; 7 8 9; 10 11 12];
b=[1 3 2; 2 1 3; 3 2 1; 3 1 2];
how to get the matrix a in the form:
a = [1 3 2; 5 4 6; 9 8 7; 12 10 11]
This is actually the permutation of matrix a w.r.t. matrix b.
How to achieve this goal in matlab?

Risposta accettata

Stephen23
Stephen23 il 30 Dic 2018
Modificato: Stephen23 il 30 Dic 2018
Use sub2ind, e.g.:
>> a = [1,2,3;4,5,6;7,8,9;10,11,12]
a =
1 2 3
4 5 6
7 8 9
10 11 12
>> b = [1,3,2;2,1,3;3,2,1;3,1,2]
b =
1 3 2
2 1 3
3 2 1
3 1 2
>> S = size(a);
>> [R,~] = ndgrid(1:S(1),1:S(2));
>> a = a(sub2ind(S,R,b))
a =
1 3 2
5 4 6
9 8 7
12 10 11

Più risposte (1)

Walter Roberson
Walter Roberson il 30 Dic 2018
a((b-1) * size(a,1) + (1:size(a,1)).')
This requires R2016b or later.

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Prodotti


Release

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by