identifying entry elements in rows of logical matrix

1 vue (au cours des 30 derniers jours)
julian gaviria
julian gaviria le 25 Jan 2023
Commenté : Dyuman Joshi le 27 Jan 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 commentaires
Dyuman Joshi
Dyuman Joshi le 26 Jan 2023
Modifié(e) : Dyuman Joshi le 26 Jan 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.
julian gaviria
julian gaviria le 26 Jan 2023
Thank you @Dyuman Joshi

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 25 Jan 2023
Modifié(e) : Stephen23 le 26 Jan 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 commentaires
Fangjun Jiang
Fangjun Jiang le 26 Jan 2023
Isn't it funny that my solution was correct after all?
Dyuman Joshi
Dyuman Joshi le 27 Jan 2023
MATLAB works in mysterious ways XD

Connectez-vous pour commenter.

Plus de réponses (1)

Fangjun Jiang
Fangjun Jiang le 25 Jan 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 commentaires
Dyuman Joshi
Dyuman Joshi le 25 Jan 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
Fangjun Jiang
Fangjun Jiang le 25 Jan 2023
You are right!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by