【问题标题】:Find the maximum value from the each set从每个集合中找到最大值
【发布时间】:2013-03-12 07:57:20
【问题描述】:

我有3组数据如下图:

A=[3 1 4 2;7 9 8 3;7 5 3 6;4 1 9 3]

B=[1 0 4 5;7 7 1 3;4 7 6 5;2 2 1 9] 

C=[9 1 3 7;9 6 5 5;1 4 3 2;0 3 2 1]

相互比较时,我需要找出最大值。 例如,对于每个集合中的矩阵 [1x1], A=3,B=1,C=9,所以最大数为9

对于矩阵[1x2],最大值=1等等..

所以

final result =[9 1 4 7;9 9 8 5;7 7 6 6;4 3 9 9]

有解决这个问题的建议吗?谢谢!

【问题讨论】:

    标签: matlab matrix max


    【解决方案1】:

    您可以使用max。对于有 3 个矩阵的情况,只需使用

    max(A, max(B, C))
    

    如果你有三个以上的矩阵,写那些max 语句会很累,所以你会在取最大值之前使用cat

    max(cat(3, A, B, C, D, E), [], 3)
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      A=[3 1 4 2;7 9 8 3;7 5 3 6;4 1 9 3];
       A = reshape(A,[1,numel(A)]);
       B=[1 0 4 5;7 7 1 3;4 7 6 5;2 2 1 9] ;
       B = reshape(B,[1,numel(B)]);
       C=[9 1 3 7;9 6 5 5;1 4 3 2;0 3 2 1];
       C = reshape(C,[1,numel(C)]);
       D = [A;B;C];
       for ii = 1:size(D,2)
        res(1,ii) = max(D(:,ii));
       end
       res = reshape(res,[4,4]);
      

      【讨论】:

      • 这在 Matlab 中根本不是要走的路。一些 cmets:A = reshape(A, [1, numel(A)])A = A(:) 是一回事。您的整个 for 循环与 res = max(D, [], 2)res = max(D') 相同。在 Matlab 中非常不建议使用 for 循环进行此类基本计算。查看 H.Musters 的答案,了解解决此问题的最佳方法。
      • @Dan 尽管我同意你的观点,但我认为这个答案不值得投反对票(毕竟​​它确实产生了正确的结果)。也许它也不值得赞成,因为它使解决方案过于复杂。
      • @EitanT 太晚了,我无法撤消。我投了反对票,因为我觉得它会误导读者远离一些最基本的 Matlab 范式,因此会造成不必要的混乱。
      • @Dan 如果您对答案进行最轻微的修改,您可以撤消您的投票。但这当然是你的选择。仍然感谢您的评论!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2018-08-04
      • 1970-01-01
      • 2019-10-18
      • 2019-02-20
      相关资源
      最近更新 更多