How select a first value from the binary matrix ?

I have below matrix i want to select one value from each column which will be 1 make other 0 at return i will get 10*10 matrix.Selection of 1 such that a11 from 1st column,a22 from 2 column,a13 from the third column,a14 from the 4column and so on and make other value in the column 0.If we go for the indexing is ok for the small matrix but in bigger matrix we don't know the position of the 1 value.So is it possible to changed what i want.I have 1300*500 size matrix this is only for the example.
Thanks in advanced for your help.
matrix = [
0 1 0 0 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 0
1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 1 1 1
0 1 1 0 0 1 1 0 1 1 1 0 0 1 1 0 0 0 1 1
0 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0
1 1 0 0 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 0
1 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 1
1 1 0 0 1 0 1 0 0 0 0 0 1 1 0 1 1 1 0 1
1 0 1 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0
0 0 1 0 1 0 1 1 0 0 0 1 1 0 0 0 1 1 0 1
];

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 20 de Ag. de 2019
Editada: Andrei Bobrov el 22 de Ag. de 2019
out = cumsum(cumsum(matrix)) == 1;
or
out = cumsum(matrix) == 1 & matrix;

Más respuestas (1)

Walter Roberson
Walter Roberson el 19 de Ag. de 2019
Editada: Walter Roberson el 19 de Ag. de 2019
[~,idx] = max(matrix);
output = sparse(idx,1:size(matrix,2),1,size(matrix,1),size(matrix,2));
Note: in the case where there are no 1's in a particular column, then this code will pick the first row of that column.
[~,idx] = max(matrix);
output = sparse(idx,1:size(matrix,2),true,size(matrix,1),size(matrix,2));
is potentially more useful for your purposes.

5 comentarios

vikash kumar
vikash kumar el 19 de Ag. de 2019
Editada: vikash kumar el 19 de Ag. de 2019
Thanks for helping me.What you gave the aswer is really nice and give the location of 1 value.It is possible to make the matrix of same n*n size from which i get the result such that only result value should be 1 and other will be 0.
Thank in advanced.Thank u Thank u so much for helping me .
I am not sure what difference there is between what I provided and what you want. I suspect that you are being confused by the sparse() output. If so then
[~,idx] = max(matrix);
output = full(sparse(idx,1:size(matrix,2),true,size(matrix,1),size(matrix,2)));
vikash kumar
vikash kumar el 20 de Ag. de 2019
Got it thank u so much
darova
darova el 20 de Ag. de 2019
You can also accept the answer. I will be pleased
With your 1300 x 500 array, only 1 in 1300 rows has a non-zero entry for each column, so sparse can be a lot more storage efficient than full(); in my test, the full version takes 41 times more memory.

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

el 19 de Ag. de 2019

Editada:

el 22 de Ag. de 2019

Community Treasure Hunt

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

Start Hunting!

Translated by