如何在MATLAB中找到多个数组的最大值?

时间:2015-01-31 03:02:55

标签: arrays matlab max

我们假设我们有一个数组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函数不允许比较两个以上的数组。因此,我必须对数组对使用max,然后在中间结果中找到最大值(这也涉及使用其他变量)。当然,如果我有,比方说,50个数组,这将是 - 实际上是 - 一个tedius过程。

有更有效的方法吗?

2 个答案:

答案 0 :(得分:3)

方法#1

使用 cat column的{​​{1}}矢量版本连接起来,然后使用带有 max 的最大值沿dim-2获取最大值

因此,假设dim-2xy为输入数组,请执行以下操作 -

z

方法#2

您可以使用 ndims 查找输入数组中的维度数,然后沿该维度的%// 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)) 维度连接,最后找到{{1沿着它获取最大值数组。这将避免所有这些来回重塑,因此可以更高效,更紧凑的代码 -

plus 1

答案 1 :(得分:1)

我认为对于一小组数组来说,最简单的方法是使用column-ify和concatenate:

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

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

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

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