【问题标题】:Matlab programming, Matrix sorting and rankingMatlab编程,矩阵排序和排序
【发布时间】:2016-06-25 22:56:43
【问题描述】:

考虑下面给出的示例。有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 件商品。 等等。

我如何在 mat lab 中做到这一点。这样当我根据当天对它进行排名时,我就应该知道有多少项目以及相应的客户。

输出应该是这样的:

                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

【问题讨论】:

  • 您能否发布您实际期望的输出外观,而不是试图用文字来描述它?
  • 您可以将其编辑到您的问题中而不是放在评论中吗?

标签: matlab


【解决方案1】:

我建议以下方法:

第一阶段

生成一个新矩阵,它是 A、B 和 C 的组合,这样: 第一个 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2022-12-22
    相关资源
    最近更新 更多