我们假设我们有一个数组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过程。
有更有效的方法吗?
答案 0 :(得分:3)
方法#1
使用 cat
将column
的{{1}}矢量版本连接起来,然后使用带有 max
的最大值沿dim-2
获取最大值
因此,假设dim-2
,x
和y
为输入数组,请执行以下操作 -
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
。