我有 5 维数字数组。目标是找到沿第 5 维的最大值及其坐标。我使用
[x,y] = max(A,[],5);
理想情况下,我希望x == A(y)
,但这似乎不会发生。我需要了解如何将y
转换为坐标数组z
以便x == A(z)
.就我而言,使用 find + 循环的成本很高,因为矩阵很大。
假设你的矩阵A
的维度为 (m,n,o)
。现在,您有沿3rd
维度的最大条目索引(以 y
为单位(和相应的最大值(以 x
为单位(。您可以通过以下代码访问最大值-
z = (1:m*n)' + (y(:)-1)*(m*n); % linear index of these locations in full array
final_matrix = reshape(A(z),m,n);
它可以很容易地扩展到 5 维矩阵。
尝试此代码进行 5 维-
[x,y] = max(A,[], 5);
z = (1:m*n*o*p)' + (y(:)-1)*(m*n*o*p);
final_matrix = reshape(A(z),m,n,o,p);
s = size(A);
[v,ii] = max(reshape(A,[],s(3)));
[i1 j1 ] = ind2sub(s(1:2),ii);
out = [v;i1;j1;1:s(3)]';