如何在MATLAB中找到3D数组每个切片的最大值和位置?

3

如何以最快的方式计算3D数组中每个“切片”的最大值及其对应的索引?

2个回答

6

假设你有 A,其中包含 n 个切片(这里我将每个切片设置为 10x10,但可以更改为任何大小):

A = rand(10,10,n);

您可以将其重塑为n列矩阵,然后取每列中的最大值:
[val,ind] = max(reshape(A,[],n),[],1);

第一个输出变量val将是一个n元素向量,其中包含所有最大值,第二个输出变量ind将是重塑后的A中这些最大值的行索引。

然后您可以获取切片的大小:

sz = size(A);

使用它来找到每个切片中每个最大元素的行(r)和列(c):

[r,c] = ind2sub(sz(1:2),ind)

在这个例子中(使用rand和10x10x6数组A),最终你会得到类似下面这样的结果(但数值不同):
val =
      0.99861      0.98895      0.98681      0.99991      0.96057      0.99176
r =
     9     7     3     8     2     9
c =
     1     1     8    10    10     5

非常棒的解决方案 - 在不使用for循环的情况下,同时恢复了最大值和索引。谢谢! - B. Thomas

0
如果你有一个矩阵A,其中包含n个层,那么你可以通过两个步骤应用max函数来获取一个1 x 1 x n的矩阵,该矩阵包含每个层的最大值。
A = rand(10,10,n);
layer_max = max(max(A,[],1),[],2); % 1 x 1 x n matrix, use squeeze to remove extra dims 
layer_max = squeeze(layer_max);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接