我在维度B
的Matlab nx1
中有一个向量,它以特定顺序包含1
到n
的整数,例如n=6 B=(2;4;5;1;6;3)
。
我有A
维mx1
的向量m>1
,其中m=13
包含相同的整数,每个整数重复任意次数,例如A=(1;1;1;2;3;3;3;4;5;5;5;5;6)
C
。
我希望得到mx1
维A
B
,其中C=(2;4;5;5;5;5;1;1;1;6;3;3;3)
中的整数按照Toolbar
中的顺序重新排序。在示例中,android:textColorPrimary
答案 0 :(得分:5)
ismember
和sort
-
[~,idx] = ismember(A,B)
[~,sorted_idx] = sort(idx)
C = B(idx(sorted_idx))
如果你是单行,那么另一行bsxfun
-
C = B(nonzeros(bsxfun(@times,bsxfun(@eq,A,B.'),1:numel(B))))
答案 1 :(得分:3)
这只需要一个sort
和索引:
ind = 1:numel(B);
ind(B) = ind;
C = B(sort(ind(A)));
答案 2 :(得分:2)
使用repelem
,accumarray
,unique
B=[2;4;5;1;6;3];
A=[1;1;1;2;3;3;3;4;5;5;5;5;6];
counts = accumarray(A,A)./unique(A);
repelem(B,counts(B));
%// or as suggested by Divakar
%// counts = accumarray(A,1);
%// repelem(B,counts(B));
PS:repelem
是在 R2015a
中引入的。如果您使用的是先前版本,请参阅here
答案 3 :(得分:0)
使用hist
的另一种解决方案,但有一个循环和扩展内存:(
y = hist(A, max(A))
reps = y(B);
C = [];
for nn = 1:numel(reps)
C = [C; repmat(B(nn), reps(nn), 1)];
end