How to find the last 1 in every row

5 visualizaciones (últimos 30 días)
Alex
Alex el 26 de Nov. de 2020
Editada: Bruno Luong el 26 de Nov. de 2020
Simliar to this question, but for finding the last 1 in each row.
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;

Respuestas (2)

KALYAN ACHARJYA
KALYAN ACHARJYA el 26 de Nov. de 2020
Editada: KALYAN ACHARJYA el 26 de Nov. de 2020
A=rot90(A,90);
[~,idx]=max(A==1,[],2)
Result:
idx =
2
3
2

Bruno Luong
Bruno Luong el 26 de Nov. de 2020
Editada: Bruno Luong el 26 de Nov. de 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

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by