identifying entry elements in rows of logical matrix

1 visualización (últimos 30 días)
julian gaviria
julian gaviria el 25 de En. de 2023
Comentada: Dyuman Joshi el 27 de En. de 2023
I want to identifiy the entry elements (i.e., the first "1" value) in the rows of the following logical matrix
input_matrix = [1 1 1; 0 1 1; 0 0 0; 0 1 0];
the expected matrix would be the following:
output_matrix = [1 0 0; 0 1 0; 0 0 0; 0 1 0];
The position of the "entries" (first "1" values) in both input and output matrices is respected. Also, Further "1" values (following the entries) have been replaced with "0" values.
Thanks in advance for any hint.
  2 comentarios
Dyuman Joshi
Dyuman Joshi el 26 de En. de 2023
Editada: Dyuman Joshi el 26 de En. de 2023
@julian gaviria Just a note -
My and Stephen's code did exactly what was asked.
You should have clarified what exactly you wanted, in your question statement. The comments on my code clearly indicated what the code does, and you should have picked up from them that it is not what you want to do and mentioned it in reply to that.
Nevertheless, @Stephen23 has already provided an answer for your query.
I will be deleting my solution.

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 25 de En. de 2023
Editada: Stephen23 el 26 de En. de 2023
A = [1,1,1;0,1,1;0,0,0;0,1,0]
A = 4×3
1 1 1 0 1 1 0 0 0 0 1 0
B = A .* (cumsum(A,2)==1) % replace .* with & to get a logical output
B = 4×3
1 0 0 0 1 0 0 0 0 0 1 0
  11 comentarios
Fangjun Jiang
Fangjun Jiang el 26 de En. de 2023
Isn't it funny that my solution was correct after all?
Dyuman Joshi
Dyuman Joshi el 27 de En. de 2023
MATLAB works in mysterious ways XD

Iniciar sesión para comentar.

Más respuestas (1)

Fangjun Jiang
Fangjun Jiang el 25 de En. de 2023
in = [1 1 1; 0 1 1; 0 0 0; 0 1 0];
M=size(in,1);
temp=[zeros(M,1), in];
d=diff(temp,1,2);
out=(d==1)
out = 4×3 logical array
1 0 0 0 1 0 0 0 0 0 1 0
  3 comentarios
Dyuman Joshi
Dyuman Joshi el 25 de En. de 2023
This wouldn't work if there is a 1 after a 0
in = [1 1 0 1; 0 1 1 1; 0 0 0 0; 0 0 1 0];
M=size(in,1);
temp=[zeros(M,1), in];
d=diff(temp,1,2);
out=(d==1)
out = 4×4 logical array
1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0

Iniciar sesión para comentar.

Categorías

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

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by