loop for removing highest value until specific value is reached

1 view (last 30 days)
for exmaple,
for 10x10 matrix A
i want to make loop which removes highest element until sum of A is less than 20
and i want to know each removed element's position
i think 'while-loop' is needed
( I only know finding the first highest value using 'for-loop')

Accepted Answer

Adam Danz
Adam Danz on 18 Jul 2022
A = randi(13,10);
while sum(A,'all','omitnan')>20
[~,idx] = max(A(:),[],'omitnan');
A(idx) = NaN;
end
isRemoved = isnan(A)
isRemoved = 10×10 logical array
1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1
sum(A,'all','omitnan')
ans = 19

More Answers (1)

David Hill
David Hill on 18 Jul 2022
[b,idx]=sort(A(:));
IDX=idx(cumsum(b)>=20);%linear index of each of the removed element's position

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!