如何在 MATLAB 中找到多个数组的最大值?
How to find the maximum of multiple arrays in MATLAB?
假设我们有一个数组 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,然后在中间结果中找到 max(这也涉及使用额外的变量)。当然,如果我有,比方说,50 个数组,这将是——而且确实是——一个乏味的过程。
有没有更有效的方法?
我认为对于一小组数组最简单的方法是列化和连接:
maxValue = max([x(:);y(:)]);
对于某些数据结构(例如元胞数组或结构)中的大量数组,我最好使用简单循环:
maxValue = max(cellOfMats{1}(:));
for k = 2:length(cellOfMats)
maxValue = max([maxValue;cellOfMats{k}(:)]);
end
对于大量具有不同名称的单独数组的病态情况,我说"don't do that"并将它们放在数据结构中或使用eval
循环。
方法 #1
将它们的 column
向量版本沿着 dim-2
与 cat
and then use maximium values with max
沿着 dim-2
连接以获得最大值。
因此,假设 x
、y
和 z
是输入数组,做这样的事情 -
%// 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
假设我们有一个数组 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,然后在中间结果中找到 max(这也涉及使用额外的变量)。当然,如果我有,比方说,50 个数组,这将是——而且确实是——一个乏味的过程。
有没有更有效的方法?
我认为对于一小组数组最简单的方法是列化和连接:
maxValue = max([x(:);y(:)]);
对于某些数据结构(例如元胞数组或结构)中的大量数组,我最好使用简单循环:
maxValue = max(cellOfMats{1}(:));
for k = 2:length(cellOfMats)
maxValue = max([maxValue;cellOfMats{k}(:)]);
end
对于大量具有不同名称的单独数组的病态情况,我说"don't do that"并将它们放在数据结构中或使用eval
循环。
方法 #1
将它们的 column
向量版本沿着 dim-2
与 cat
and then use maximium values with max
沿着 dim-2
连接以获得最大值。
因此,假设 x
、y
和 z
是输入数组,做这样的事情 -
%// 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