Rearrange elements of matrix based on an index matrix
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a 5x3 matrix and I want to rearrange each row according to the correponding row of a 5x3 index matrix
x=randn(5,3)
z=randn(5,3)
[~,I]=sort(x,2)
Now I want to sort rows of z using the index matrix I. But using the following does not work. For example, I want the first row of zz to be sorted according to the first row of x, which should result in zz(1,:)= [1.3644, -0.1687, 0.4662].
zz=z(I)
댓글 수: 0
채택된 답변
Stephen23
2024년 8월 27일
편집: Stephen23
2024년 8월 27일
Yes, it is awkward.
x=randn(5,3)
z=randn(5,3)
[~,I] = sort(x,2)
Perhaps
S = size(I);
[R,~] = ndgrid(1:S(1),1:S(2));
J = sub2ind(S,R,I);
zz = z(J)
Or
zz = z;
for k = 1:size(I,1)
zz(k,:) = zz(k,I(k,:));
end
zz
Or
zz = cell2mat(cellfun(@(v,x)v(x),num2cell(z,2),num2cell(I,2),'uni',0))
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Operating on Diagonal Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!