如何使用 max 或 min 返回的多维索引?
How can I use the multidimensional index returned by max or min?
在 MATLAB 中,
[M,I] = max(A, [], dim)
returns 最大值和这些最大值的索引 沿指定维度 dim。当 A 是一个多维数组时,变量 I 原来是一个与 A 具有相同维度的多维数组,除了 dim 维度设置为 1。我的问题是如何使用索引多维数组 I 从 A 中取回最大值.
为了提供一个特定的用例,我想在维度 dim 上获得具有最大 实部 的复数,当 A 可以包含复数时。
我可以用
[M,I] = max(real(A), [], dim)
获取最大实部及其索引。但是,如何在这些索引处获得原始复杂变量?我对 A 的维度超过 2 维的情况特别感兴趣。
如果 dim
是任意的,最简单的方法是将其移动到第一维(使用 permute
)以简化索引返回:
A = randn(2,3,4)+1j*randn(2,3,4); %// example data
dim = 2; %// dimension along which to maximize
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]); %// move dim to 1st dim
[M,I] = max(real(Ap), [], 1); %// minimize function of Ap along 1st dim
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I)); %// build linear indices from I
values = Ap(ind); %// index into Ap to get minimizing values
检查是否有效:使用 A
非复杂(因此 real
什么都不做)并将 values
与 M
进行比较:
>> A = randn(2,3,4);
dim = 2;
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]);
[M,I] = max(real(Ap), [], 1);
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I));
values = Ap(ind);
values == M
ans(:,:,1) =
1 1
ans(:,:,2) =
1 1
ans(:,:,3) =
1 1
ans(:,:,4) =
1 1
在 MATLAB 中,
[M,I] = max(A, [], dim)
returns 最大值和这些最大值的索引 沿指定维度 dim。当 A 是一个多维数组时,变量 I 原来是一个与 A 具有相同维度的多维数组,除了 dim 维度设置为 1。我的问题是如何使用索引多维数组 I 从 A 中取回最大值.
为了提供一个特定的用例,我想在维度 dim 上获得具有最大 实部 的复数,当 A 可以包含复数时。
我可以用
[M,I] = max(real(A), [], dim)
获取最大实部及其索引。但是,如何在这些索引处获得原始复杂变量?我对 A 的维度超过 2 维的情况特别感兴趣。
如果 dim
是任意的,最简单的方法是将其移动到第一维(使用 permute
)以简化索引返回:
A = randn(2,3,4)+1j*randn(2,3,4); %// example data
dim = 2; %// dimension along which to maximize
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]); %// move dim to 1st dim
[M,I] = max(real(Ap), [], 1); %// minimize function of Ap along 1st dim
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I)); %// build linear indices from I
values = Ap(ind); %// index into Ap to get minimizing values
检查是否有效:使用 A
非复杂(因此 real
什么都不做)并将 values
与 M
进行比较:
>> A = randn(2,3,4);
dim = 2;
Ap = permute(A, [dim 1:dim-1 1+dim:ndims(A)]);
[M,I] = max(real(Ap), [], 1);
ind = I + reshape(0:size(Ap,1):numel(Ap)-1, size(I));
values = Ap(ind);
values == M
ans(:,:,1) =
1 1
ans(:,:,2) =
1 1
ans(:,:,3) =
1 1
ans(:,:,4) =
1 1