Matlab编程,矩阵排序和排名

时间:2016-06-25 14:15:10

标签: matlab

考虑下面给出的一个例子。有3个客户A,B,C。 矩阵的第一行是各个客户的需求,第二行是他们需要的日子。 例如:需求A = [10,40,50; 15,45,75];顾客A在第15天需要10件物品。第45天40件,第75天50件。类似于B,C。

 demand A=[10,40,50;15,45,75];
 demand B=[80,30,20;05,35,80];
 demand C=[50,40,30;20,47,88];

现在我需要根据天数对客户进行排名。所以这里的回答应该是这样的 等级1:第5天客户B 80项 等级2:第15天客户A 10项 等级3:第20天客户C 50项。 等等。

我怎样才能在垫子实验室里做到这一点。因此,当我根据当天排名时,我应该知道有多少项目和哪个客户。

输出应该是这样的:

                Rank  Customer  items  day
                  1     B        80     05
                  2     A        10     15
                  3     C        50     20
                  4     B        30     35
                  5     A        40     45
                  6     C        40     47
                  7     A        40     75
                  8     B        20     80 
                  9     C        30     88

1 个答案:

答案 0 :(得分:0)

我建议采用以下方法:

第一阶段

生成一个新矩阵,它是A,B和C的组合,这样: 第一个col代表当天。 第二个col代表请求的数量。 第三列是客户指数(A = 1,B = 2,C = 3)。

res = [A',ones(size(A',1),1);B',ones(size(A',1),1)*2;C',ones(size(C',1),1)*3];
res(:,[2,1]) = res(:,[1,2]);

第二阶段

根据表示日期的第一列

对矩阵进行排序
[~,sortedDaysIndices] = sort(res(:,1));
res = res(sortedDaysIndices,:);

第三阶段:打印结果

for ii=1:size(res)
    if res(ii,3)==1
        costumerStr = 'A';
    elseif res(ii,3)==2
        costumerStr = 'B';
    else
        costumerStr = 'C';
    end

    fprintf('%s\n',[num2str(ii) ' ' costumerStr ' ' num2str(res(ii,2)) ' ' num2str(res(ii,1))])
end

<强>结果

1 B 80 5
2 A 10 15
3 C 50 20
4 B 30 35
5 A 40 45
6 C 40 47
7 A 50 75
8 B 20 80
9 C 30 88