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 Matrix Indexing 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!