Find maximum among the elements in the matrix lower than 80% of max element of entire matrix
2 views (last 30 days)
Show older comments
Hi!
I have a matrix A(n,n). I determine the maximum element like S=max(A(:)).
Now, I would like to find the maximum element only among the elements of the matrix A which are lower than 0.8*S.
Could you suggest some solutions of that problem?
Thank you in advacne!
0 Comments
Accepted Answer
Sudhakar Shinde
on 14 Oct 2020
Edited: Sudhakar Shinde
on 14 Oct 2020
%Try this:
Result = A(A<(0.8*S))
2 Comments
More Answers (1)
Ameer Hamza
on 14 Oct 2020
Edited: Ameer Hamza
on 14 Oct 2020
A; % your matrix
S = max(A, [], 'all'); % same as: S=max(A(:))
S2 = max(A.*(A<0.8*S), [], 'all');
3 Comments
Ameer Hamza
on 14 Oct 2020
No, both will be equivalent, even if matrix have negative values. Infact, using multiplication is much faster
A = randn(10000); % both positive and negative values
S = max(A, [], 'all');
tic
S21 = max(A.*(A<0.8*S), [], 'all');
t1 = toc;
tic
S22 = max(A(A<0.8*S), [], 'all');
t2 = toc;
tf = isequal(S21, S22);
Result
>> t1
t1 =
0.3251
>> t2
t2 =
1.2465
>> tf
tf =
logical
1
Fangjun Jiang
on 14 Oct 2020
An easy counterexample:
%%
A=[1 -1]; % your matrix
S = max(A, [], 'all'); % same as: S=max(A(:))
S2 = max(A.*(A<0.8*S), [], 'all');
S1=max(A(A<0.8*S), [], 'all');
isequal(S1,S2)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!