我在确定3D矩阵(MATLAB)中两个最大值的位置时遇到了问题。假设我的矩阵A
输出如下:
A(:,:,1) =
5 3 5
0 1 0
A(:,:,2) =
0 2 0
8 0 8
A(:,:,3) =
3 0 0
0 7 7
A(:,:,4) =
6 6 0
4 0 0
首先A(:,:,1)
,我要确定第一行的值最高(A=5)
。但是我需要两个索引位置,在本例中为1
和3
。这和其他一样A(:,:,:)
。
我已经搜索了SO,但是由于我对MATLAB不好,所以无法找到解决方法。
请在这方面帮助我。如果我不需要使用for循环来获取所需的输出,那就更好了。
以下代码为您提供了各自最大值的列和行。
第一步将获取包含第一维和第二维的每个子矩阵的最大值。由于max在默认情况下适用于第一维,因此矩阵被重塑以合并原始的第一维和第二维。
max_vals = max(reshape(A,size(A,1)*size(A,2),size(A,3)));
max_vals =
5 8 7 6
在第二步中,max_vals
使用arrayfun
第三维来获得等于每个子矩阵各自元素的索引。由于arrayfun
是单元的输出,因此cell2mat
可用于将输出转换为矩阵。最后一步,将的线性索引从find
转换为子索引ind2sub
。
[i,j] = ind2sub(size(A(:,:,1)),cell2mat(arrayfun(@(i)find(A(:,:,i)==max_vals(i)),1:size(A,3),'UniformOutput',false)))
i =
1 2 2 1
1 2 2 1
j =
1 1 2 1
3 3 3 2
因此,inj
中的值就是您想要的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句