Issue with finding the indices of the minimum element in a 3-Dimensional Array

6 次查看(过去 30 天)
For a 2D array A, the command
[row,column]=find(A==min(min(A)))
outputs the row and column indices of the minimum respectively. But using a similar technique isn't working for a 3D array. For a 10x10x11 array variance_matrix (file attached), the command
find(variance_matrix==min(min(min(variance_matrix))))
outputs the location "151" which I presume represents the element in 2nd page/sheet, 5th column and 1st row.
But, the command
[row,col,depth] = find(variance_matrix==min(min(min(variance_matrix))));
outputs an absurd answer. "depth" is shown to be a logical operator while "col" (16) exceeds the actual column size (10).
I'm hoping someone would explain what's going wrong and if there's a right way to do it for multidimensional (>=3) arrays.

采纳的回答

Torsten
Torsten 2022-9-2
编辑:Torsten 2022-9-2
A = rand(10,10,11);
B = A(:);
index = find(A==min(B))
index = 990
B(index)
ans = 2.4262e-04
[i j k] = ind2sub([10 10 11],index)
i = 10
j = 9
k = 10
A(i,j,k)
ans = 2.4262e-04
  4 个评论

请先登录,再进行评论。

更多回答(1 个)

Steven Lord
Steven Lord 2022-9-3
Use the 'all' dimension argument and the 'linear' index argument to obtain the linear index of the maximum of the array considering the data in all dimensions.
A = reshape(randperm(24), [3 2 4])
A =
A(:,:,1) = 5 13 9 3 23 6 A(:,:,2) = 22 15 8 24 19 16 A(:,:,3) = 11 21 1 14 2 10 A(:,:,4) = 18 12 20 7 4 17
[value, ind] = min(A, [], 'all', 'linear')
value = 1
ind = 14
A(ind)
ans = 1
If you need the subscripts instead of the linear index, use ind2sub.
[row, column, page] = ind2sub(size(A), ind)
row = 2
column = 1
page = 3

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by