How to find the last 1 in every row
    4 views (last 30 days)
  
       Show older comments
    
Say I have a matrix
A = [0 1 1 1 0;
     1 1 1 0 0;
     0 1 1 1 0]
What's the fastest way to find the last 1 in each row? The output should be
ans = [2; 3; 2];
So far I have come up with this:
[~, I] = max(fliplr(A),[],2);
I = size(A,2) + 1  - I;
0 Comments
Answers (2)
  KALYAN ACHARJYA
      
      
 on 26 Nov 2020
        
      Edited: KALYAN ACHARJYA
      
      
 on 26 Nov 2020
  
      A=rot90(A,90);
[~,idx]=max(A==1,[],2)
Result:
idx =
     2
     3
     2
0 Comments
  Bruno Luong
      
      
 on 26 Nov 2020
        
      Edited: Bruno Luong
      
      
 on 26 Nov 2020
  
      Depending on the density of 1s, but a for-loop (remember that?) might be the fatest
function BenchMax
A=rand(10000)>0.5;
tic
[~, I] = max(fliplr(A),[],2);
I = size(A,2) + 1  - I;
toc % Elapsed time is 0.045622 seconds.
tic
[m,n] = size(A);
I = zeros(m,1);
for r=1:m
    for c=n:-1:1
        if A(r,c)
            I(r) = c;
            break
        end
    end
end
I = n+1-I;
toc % Elapsed time is 0.000437 seconds.
end
0 Comments
See Also
Categories
				Find more on Logical in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

