沿着Matlab

时间:2017-07-27 05:12:36

标签: arrays matlab multidimensional-array max argmax

说,Y是一个7维数组,我需要一种有效的方法来最大化它在最后3个维度,这将在GPU上工作。 因此,我需要一个具有最大Y值的四维数组和三个四维数组,并在最后三个维度中使用这些值的索引。 我能做到

[Y7, X7] = max(Y , [], 7);
[Y6, X6] = max(Y7, [], 6);
[Y5, X5] = max(Y6, [], 5);

然后我已经找到了值(Y5)和沿第五维的指数(X5)。但我仍然需要沿着第6和第7维度的指数。

1 个答案:

答案 0 :(得分:0)

这是一种方法。设N表示要最大化的维数。

  1. 重塑Y以将最后N尺寸合并为一个。
  2. 沿折叠尺寸最大化。这使得argmax成为这些维度的线性指数。
  3. 将线性索引展开到N子索引,每个维度一个。
  4. 以下代码适用于任意数量的维度 (在您的示例中不一定是73。为实现这一目标,它一般处理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