Delete all values in a row after the first value

Hi everyone
I have a matrix with 3000 rows and 4 columns. the values in the matrix are just one and zero. The sum of each row can just be one. In some rows the sum is 2. What I want now is to delete all 1 after the first 1. So in my matrix in each row I just want the first vaue 1 and all the following values in this matrix should be 0.
For example: row number 345: 0001000 1 0000 change to 0001000 0 0000
thank you for your help.

 Accepted Answer

m = 10 ; n = 5 ;
A = randi([0 1],m,n) ;
B = zeros(size(A)) ;
for i = 1:m
idx = find(A(i,:)==1) ;
B(i,idx(1))= 1;
end
There might be more elegant solution.

5 Comments

Thank you for your help. When I replace A by my original Matrix and I create a new matrix B and then I do the code I get an error "Index exceeds matrix dimensions". Now I don't really know why?
What you have taken m as? Put your code here.
m=5540 , n=4
FOMC_X_try = zeros(size(FOMC_X));
for i = 1:m
idx = find(FOMC_X(i,:)==1) ;
FOMC_X_try(i,idx(1))= 1;
end
That is now my code. FOMC_X is my real matrix and FOMC_X_try is what I genereated.
m=5540 , n=4
FOMC_X_try = zeros(size(FOMC_X));
for i = 1:m
idx = find(FOMC_X(i,:)==1) ;
if ~isempty(idx)
FOMC_X_try(i,idx(1))= 1;
end
end
If there are no ones in a particular row, idx will be empty. So is the error.
I replaced the old code with this one. Now it works. thank you very much for your help and your time.

Sign in to comment.

More Answers (1)

B = cumsum(~cumprod(~A,2), 2) <= 1;
If I worked it out properly as I fall asleep...

Categories

Asked:

on 6 Oct 2016

Commented:

on 6 Oct 2016

Community Treasure Hunt

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

Start Hunting!