Asked by vikash kumar
on 19 Aug 2019

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

];

Answer by Andrei Bobrov
on 20 Aug 2019

Edited by Andrei Bobrov
on 22 Aug 2019

Accepted Answer

out = cumsum(cumsum(matrix)) == 1;

or

out = cumsum(matrix) == 1 & matrix;

Answer by Walter Roberson
on 19 Aug 2019

Edited by Walter Roberson
on 19 Aug 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.

vikash kumar
on 20 Aug 2019

Got it thank u so much

darova
on 20 Aug 2019

You can also accept the answer. I will be pleased

Walter Roberson
on 20 Aug 2019

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Selva Karna (view profile)

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/476630-how-select-a-first-value-from-the-binary-matrix#comment_737055

Sign in to comment.