基于另一个数组对Matlab数组进行排序

时间:2016-09-09 17:35:54

标签: arrays matlab pattern-matching

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函数来处理这种排序?

1 个答案:

答案 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 ]