说,Y是一个7维数组,我需要一种有效的方法来最大化它在最后3个维度,这将在GPU上工作。 因此,我需要一个具有最大Y值的四维数组和三个四维数组,并在最后三个维度中使用这些值的索引。 我能做到
[Y7, X7] = max(Y , [], 7);
[Y6, X6] = max(Y7, [], 6);
[Y5, X5] = max(Y6, [], 5);
然后我已经找到了值(Y5)和沿第五维的指数(X5)。但我仍然需要沿着第6和第7维度的指数。
答案 0 :(得分:0)
这是一种方法。设N
表示要最大化的维数。
Y
以将最后N
尺寸合并为一个。N
子索引,每个维度一个。以下代码适用于任意数量的维度 (在您的示例中不一定是7
和3
。为实现这一目标,它一般处理Y
的大小,并使用从单元格数组中获取的逗号分隔列表来获取N
的{{1}}输出。
sub2ind
作为检查,在运行上述代码后,请观察示例Y = rand(2,3,2,3,2,3,2); % example 7-dimensional array
N = 3; % last dimensions along which to maximize
D = ndims(Y);
sz = size(Y);
[~, ind] = max(reshape(Y, [sz(1:D-N) prod(sz(D-N+1:end))]), [], D-N+1);
sub = cell(1,N);
[sub{:}] = ind2sub(sz(D-N+1:D), ind);
(为方便起见,显示为行向量):
Y(2,3,1,2,:)
最大值为>> reshape(Y(2,3,1,2,:), 1, [])
ans =
0.5621 0.4352 0.3672 0.9011 0.0332 0.5044 0.3416 0.6996 0.0610 0.2638 0.5586 0.3766
,发生在0.9011
位置(其中"位置"沿4
折叠尺寸定义)。事实上,
N=3
或者,就>> ind(2,3,1,2)
ans =
4
>> Y(2,3,1,2,ind(2,3,1,2))
ans =
0.9011
子指标而言,
N=3