【问题标题】:How to find the maximum of multiple arrays in MATLAB?如何在MATLAB中找到多个数组的最大值?
【发布时间】:2015-01-31 17:45:21
【问题描述】:

假设我们有一个数组x。我们可以找到这个数组的最大值如下:

maximum = max(x);

如果我有两个数组,比如说x和y,我可以使用命令找到包含最大值的数组

maximum_array = max(x, y);

假设这个数组是 y。然后,我可以通过使用带参数 y 的 max 命令来找到最大值,就像之前使用 x 一样:

maximum_value = max(y);

可以使用以下紧凑的单行命令执行此两步过程:

maximum_value = max(max(x, y));

但是当我们有超过 2 个数组时会发生什么?据我所知, max 函数不允许比较两个以上的数组。因此,我必须对数组对使用最大值,然后在中间结果中找到最大值(这也涉及到附加变量的使用)。当然,如果我有 50 个数组,这将是 - 而且确实是 - 一个乏味的过程。

有没有更有效的方法?

【问题讨论】:

    标签: arrays matlab max


    【解决方案1】:

    方法#1

    将它们的column 向量版本与dim-2cat 连接起来,然后将最大值与maxdim-2 一起使用以获得最大值.

    因此,假设 xyz 是输入数组,请执行以下操作 -

    %// Reshape all arrays to column vectors with (:) and then use cat
    M = cat(2,x(:),y(:),z(:))
    
    %// Use max along dim-2 with `max(..,[],2)` to get column vector 
    %// version and then reshape back to the shape of input arrays
    max_array = reshape(max(M,[],2),size(x))
    

    方法 #2

    您可以使用 ndims 找到输入数组中的维数,然后沿着该维的plus 1 维连接,最后找到max 得到最大值数组。这将避免所有来回的重塑,因此可以更高效、更紧凑的代码 -

    ndimsp1 = ndims(x)+1                         %// no. of dimensions plus 1
    maxarr = max(cat(ndimsp1,x,y,z),[],ndimsp1)  %// concatenate and find max
    

    【讨论】:

    • 谢谢!数组的“列”(:-))一开始就很有意义,我应该想到...
    • @Kotsos 除了它不是笑脸!
    • 是的,在我看来这是一个有趣的词——我什至不知道它是否是有效的英语!
    • @Kotsos 我认为这是一个足够公平的词!
    • @LuisMendo 谢谢!通过这篇文章,我提高了我的编码和英语技能。谁能说出来!
    【解决方案2】:

    我认为一小组数组最简单的方法是列化和连接:

    maxValue = max([x(:);y(:)]);
    

    对于某些数据结构中的大量数组(例如单元格数组或结构),最好使用简单的循环:

    maxValue = max(cellOfMats{1}(:));
    for k = 2:length(cellOfMats)
        maxValue = max([maxValue;cellOfMats{k}(:)]);
    end
    

    对于大量具有不同名称的单独数组的病态情况,我说“不要那样做”并将它们放在数据结构中或使用eval循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-17
      • 2021-08-30
      • 2017-06-19
      • 1970-01-01
      • 2021-05-24
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多