matlab - permutation of separate rows of matrix -


how vectorize following matlab code, performs permutation of each row of matrix r indices in corresponding row of matrix p?

for = 1:size(p,1)    pp(i,:) = r(i,p(i,:)); end 

example:

p = [3     2     1;      3     1     2;      2     3     1;      2     1     3;      1     2     3;      1     3     2]  r = [6     5     4;      6     4     5;      5     6     4;      5     4     6;      4     5     6;      4     6     5] 

produce following matrix pr:

     4     5     6      5     6     4      6     4     5      4     5     6      4     5     6      4     5     6 

one approach bsxfun -

nrows = size(r,1) pp = r(bsxfun(@plus,[1:nrows]',(p-1)*nrows)) 

or ndgrid -

[m,n] = size(r) pp = r(sub2ind([m n],ndgrid(1:m,1:n),p)) 

or replace ndgrid(1:m,1:n) repmat: repmat([1:m]',[1 n]) or meshgrid:meshgrid(1:m,1:n).'.


Comments