Multidimensional Array deleting entire max record keeping information across in order
1 次查看(过去 30 天)
显示 更早的评论
I have the following loop:
sz = 20;
m = zeros(size(sz));
for i = 1:sz
[max_val, position] = max(sh(:)); %Find Max Position
m(i,:) = [position]; %Store Max Position in "m"
sh(sh==max(sh)) = []; %Delete current max value of "sh"
end
What I am trying to do here is pretty much to extract to "m" the top 20 highest values in "sh" (sh is a 3D matrix - 100x60x95). What i am not sure is happening is if " sh(sh==max(sh)) = []; " deletes only the value or the entire "row" containig the data of the max value.
What i ultimately need is once i delete the value, i need to delete everything else pertaining to that value in the matrix so when values shift they keep their order. Thanks so much for the help!
采纳的回答
Voss
2021-12-23
If all you need is the 20 maximum values and their positions (either linear index or subscript index), then you can do this:
sh_temp = sh;
sh_temp(isnan(sh_temp)) = -Inf;
[sh_sort,ii] = sort(sh_temp(:),'descend');
sz = 20;
max_vals = sh_sort(1:sz);
m = ii(1:sz); % linear index of max_vals
[r,c,p] = ind2sub(size(sh),m); % row, column, 'page' index for each of max_vals
12 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!