Maximizing along n-1 dimensions of an n-dimensional array without a for loop

2 ビュー (過去 30 日間)
Brandon
Brandon 2021 年 10 月 12 日
コメント済み: Jan 2021 年 10 月 13 日
I have an n-dimensional array, VV, which I would like to maximize along all dimensions for each element in the first dimension. I would also like to obtain the associated linear indices so that I can evaluate related arrays at those locations. I have to do this a large amount of times, so I need to figure out a way to do this without a for loop.
Here is an example for an n=3 dimensional array, but with a loop:
VV=rand(10,10,10);
for ii=1:size(VV,1)
Vtemp = squeeze(VV(ii,:,:));
[V(ii) I(ii)] = max(Vtemp(:));
end
[~,ind] = ismember(V,VV);
Any help would be appreciated.

採用された回答

Jan
Jan 2021 年 10 月 12 日
編集済み: Jan 2021 年 10 月 12 日
VV = rand(8, 9, 10);
for ii = 1:size(VV,1)
Vtemp = squeeze(VV(ii, :, :));
[V(ii), I(ii)] = max(Vtemp(:));
end
[~,ind] = ismember(V, VV);
ind
ind = 1×10
1161 12 293 1004 415 746 307 1228 479 620
s = size(VV, 1);
W = reshape(VV, s, []);
[maxV, Index] = max(W, [], 2);
ind2 = sub2ind(size(W), 1:s, Index.')
ind2 = 1×10
1161 12 293 1004 415 746 307 1228 479 620

その他の回答 (1 件)

Steven Lord
Steven Lord 2021 年 10 月 12 日
VV=randi(1000, 5, 5, 5);
[values, locations] = max(VV, [], 1:ndims(VV)-1, 'linear');
check = [reshape(values, [], 1), reshape(VV(locations), [], 1)]
check = 5×2
904 904 984 984 973 973 981 981 975 975
  1 件のコメント
Jan
Jan 2021 年 10 月 13 日
Thanks for pointing to the new 'linear' output. It was introduced in R2019a.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeElementary Math についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by