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

B. *_*mas 3 arrays matlab max

计算3D阵列的每个"切片"的最大值及其相应的索引的最快方法是什么?

EBH*_*EBH 6

假设你有A跟n片(这里我只是做10每片10,但是这是可以改变任何尺寸):

A = rand(10,10,n);
Run Code Online (Sandbox Code Playgroud)

您可以将其重新整形为n列矩阵,然后取每列的最大值:

[val,ind] = max(reshape(A,[],n),[],1);
Run Code Online (Sandbox Code Playgroud)

第一个输出val将是具有所有最大值的n元素向量,第二个输出ind将是重新整形的行索引A.

然后你得到切片的大小:

sz = size(A);
Run Code Online (Sandbox Code Playgroud)

并使用它来查找每个切片中每个最大元素的row(r)和column(c):

[r,c] = ind2sub(sz(1:2),ind)
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中(使用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
Run Code Online (Sandbox Code Playgroud)