I have a Matrix, A.
I want to find the max and min for every row and column in A, excluding the zero entries.
I have coded it using For loops, but it is too slow. I need it to be all vectorized. Any help is greatly appreciated.

1 commentaire

Dan
Dan le 28 Déc 2015
A = matrix with some zero entries . Indzero = find( A== 0); B=A; B(Indzero) = max(max(A))+1; Min(B,[],1) B(Indzero) = min(min(A))-1; Max(B,[],1)
U can use this sort of logic maybe . u can also go at it by gpu processing or mexing for faster results ( this is exactly the type of probelms where u get the best rests with gpus Nd mexing )

Connectez-vous pour commenter.

 Réponse acceptée

Richard Brown
Richard Brown le 12 Avr 2012

2 votes

B = A;
B(B == 0) = NaN;
colMax = max(B);
colMin = min(B);
rowMax = max(B, [], 2);
rowMin = min(B, [], 2);
edit: missed the bit about the zero entries

1 commentaire

Edward Umpfenbach
Edward Umpfenbach le 12 Avr 2012
Thank you. I didn't think to change the zeros to NaN so that they didn't mess up the min operation.

Connectez-vous pour commenter.

Plus de réponses (1)

Geoff
Geoff le 12 Avr 2012

1 vote

When you say 'for every row and column', do you mean a single max and min for the entire matrix? This would do it:
nzmin = min(A(A ~= 0));
nzmax = max(A(A ~= 0));
[edit]
Note that if you have float data, you might want to consider values 'near' zero:
ztol = eps(max(A(:)));
nz = A < -ztol | A > ztol; % select non-zeros
nzmin = min(A(nz));
nzmax = max(A(nz));
It's refreshing to use a proliferation of 'nz', since it's my nationality =)

3 commentaires

Richard Brown
Richard Brown le 12 Avr 2012
Ha, mine too! Whereabouts?
Geoff
Geoff le 12 Avr 2012
My heart's in Dunedin. But I moved up to Auckland to get away from Animation Research Ltd ;-) You're a Canterbury lad, right?
Richard Brown
Richard Brown le 12 Avr 2012
I am indeed, wobbles and all :)

Connectez-vous pour commenter.

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by