# How to set all elements in a 2D Matrix between two indices to "1" in each row

1 visualizzazione (ultimi 30 giorni)
Tim il 5 Dic 2013
Commentato: Tim il 6 Dic 2013
I've a matrix A e.g. like this:
A =
1 0 0 1 0 0
0 0 1 0 0 1
0 1 1 0 0 0
0 1 0 1 0 0
And I want all elements between the "ones" per row to be "one" as well. The result should look like this: B =
1 1 1 1 0 0
0 0 1 1 1 1
0 1 1 0 0 0
0 1 1 1 0 0
If it helps, I also have two vectors with the indices of the first and second one.
Thanks!!
PS: If possible the solution would not use any loops since the real matrix that I have to use is very large and the program shall be very efficient.
##### 0 CommentiMostra -1 commenti meno recentiNascondi -1 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Alfonso Nieto-Castanon il 5 Dic 2013
cumsum(A,2)==1|A;
##### 2 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Tim il 6 Dic 2013
A one liner..Perfect! Great work, thanks a lot!

Accedi per commentare.

### Più risposte (2)

Andrei Bobrov il 5 Dic 2013
cumsum(A,2)>0 & fliplr(cumsum(A(:,end:-1:1),2))>0
##### 2 CommentiMostra 1 commento meno recenteNascondi 1 commento meno recente
Tim il 6 Dic 2013
Nice Solution as well! Thanks!

Accedi per commentare.

sixwwwwww il 5 Dic 2013
you can do it as follow:
for i = 1:size(A, 1)
idx = find(A(i, :));
A(i, min(idx):max(idx)) = 1;
end
##### 1 CommentoMostra NessunoNascondi Nessuno
Tim il 5 Dic 2013
Nice, thanks! That helps. But is there a way to avoid the loop? E.g. use a vector that contains all the "idx" or so? Thanks!

Accedi per commentare.

### Categorie

Scopri di più su Matrix Indexing in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by