How to find the last 1 in every row
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (2)
KALYAN ACHARJYA
le 26 Nov 2020
Modifié(e) : KALYAN ACHARJYA
le 26 Nov 2020
A=rot90(A,90);
[~,idx]=max(A==1,[],2)
Result:
idx =
2
3
2
0 commentaires
Bruno Luong
le 26 Nov 2020
Modifié(e) : Bruno Luong
le 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 commentaires
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!