我有5维数字数组。目标是沿第5维及其坐标找到最大值。我用
[x,y] = max(A,[],5);
理想情况下,我希望x == A(y)
,但这似乎不会发生。我需要了解如何将y
转换为坐标z
数组,以便x == A(z)
。在我的情况下使用find +循环是昂贵的,因为矩阵是巨大的。
答案 0 :(得分:0)
假设您的矩阵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);
答案 1 :(得分:0)
s = size(A);
[v,ii] = max(reshape(A,[],s(3)));
[i1 j1 ] = ind2sub(s(1:2),ii);
out = [v;i1;j1;1:s(3)]';