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

4 Ansichten (letzte 30 Tage)
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!

Akzeptierte Antwort

Sudhakar Shinde
Sudhakar Shinde am 14 Okt. 2020
Bearbeitet: Sudhakar Shinde am 14 Okt. 2020
%Try this:
Result = A(A<(0.8*S))

Weitere Antworten (1)

Ameer Hamza
Ameer Hamza am 14 Okt. 2020
Bearbeitet: Ameer Hamza am 14 Okt. 2020
A; % your matrix
S = max(A, [], 'all'); % same as: S=max(A(:))
S2 = max(A.*(A<0.8*S), [], 'all');
  3 Kommentare
Ameer Hamza
Ameer Hamza am 14 Okt. 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 am 14 Okt. 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)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by