A= [1, 1, 1, 2, 3, 0, 0, 0];
B= [1, 2, 3 , 3, 3 , 4 , 4, 4];
A是我拥有的数组,我想安排它,以便A看起来像:
A= [3, 2, 1, 1, 1, 0, 0, 0]; OR
A= [3, 2, 0, 0, 0, 1, 1, 1];
我知道(从B)开始时有一个唯一的数字,然后是另一个唯一的数字,然后是3个唯一数字和另外三个唯一数字。如果A不符合该档案,那么我就退出了。是否有一些Matlab函数来处理这种排序?
答案 0 :(得分:1)
我相信这个功能就是你所追求的。它对A进行排序,使得Asort(i)出现在A中的次数与B(i)出现在B中的所有i的次数相匹配。
function [ Asort] = numsort( A, B)
A=sort(A);
for i=1:length(A);
numA(i)=length(find(A==A(i)));
numB(i)=length(find(B==B(i)));
end
[numAsort,f1]=sort(numA);
[numBsort,f2]=sort(numB);
if isequal(numAsort,numBsort);
Asort1=A(f1);
for i=1:length(A);
Asort(f2(i))=Asort1(i);
end
else
error('error')
end
end
使用向量A和B,运行我得到的函数:
Asort = [ 2 3 0 0 0 1 1 1 ]