Find maximum among the elements in the matrix lower than 80% of max element of entire matrix

4 vues (au cours des 30 derniers jours)
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!

Réponse acceptée

Sudhakar Shinde
Sudhakar Shinde le 14 Oct 2020
Modifié(e) : Sudhakar Shinde le 14 Oct 2020
%Try this:
Result = A(A<(0.8*S))

Plus de réponses (1)

Ameer Hamza
Ameer Hamza le 14 Oct 2020
Modifié(e) : Ameer Hamza le 14 Oct 2020
A; % your matrix
S = max(A, [], 'all'); % same as: S=max(A(:))
S2 = max(A.*(A<0.8*S), [], 'all');
  3 commentaires
Ameer Hamza
Ameer Hamza le 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
Fangjun Jiang le 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)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by