在Matlab中重新排序向量?

use*_*148 4 arrays matlab

我在Matlab向量Bnx1包含整数从1n按照一定的顺序,例如n=6 B=(2;4;5;1;6;3).

我有一个矢量A维数mx1m>1包含在升序每一个重复任意次数,例如,相同的整数m=13 A=(1;1;1;2;3;3;3;4;5;5;5;5;6).

我想获得C维度mx1,其中整数in A按顺序重新排序B.在这个例子中,C=(2;4;5;5;5;5;1;1;1;6;3;3;3)

Div*_*kar 5

ismembersort- 的一种方法-

[~,idx] = ismember(A,B)
[~,sorted_idx] = sort(idx)
C = B(idx(sorted_idx))
Run Code Online (Sandbox Code Playgroud)

如果你是单行,那么另一个bsxfun-

C = B(nonzeros(bsxfun(@times,bsxfun(@eq,A,B.'),1:numel(B))))
Run Code Online (Sandbox Code Playgroud)