how to shift trapped zeros to the bottom keeping leading zeros in given matrix fixed?

1 view (last 30 days)
Hi all, I have a problem while finding the probablity transition matrix. The code I have written to find the transition matrix calculate the transition probability matrices of each columns (in the given matrix below) but it excludes the transition between two states if zeros are trapped like
1
0
2 (shown below in bold) So, I wanted shift the trapped zeros to last.
I encountered trapped zeros in the matrix for instance, a matrix like
A = [0 0 0 1 0 2 3 1 2 3 0 0 0;
1 2 2 1 1 2 3 1 2 3 1 3 4;
0 1 0 1 0 0 0 1 2 1 1 2 2;
2 1 2 1 0 0 0 0 1 1 1 1 1;
1 0 0 1 1 1 1 1 2 2 2 1 1]
Now, I want to change this matrix into new matrix like
new_A =[0 0 0 1 0 2 3 1 2 3 0 0 0;
1 2 2 1 1 2 3 1 2 3 1 3 4;
2 1 2 1 1 1 1 1 2 1 1 2 2;
1 1 0 1 0 0 0 1 1 1 1 1 1;
0 0 0 1 0 0 0 0 2 2 2 1 1]
shifting all trapped zeros to the bottom of each column. Any help will be greatly appreciated.

Accepted Answer

Matt J
Matt J on 21 Mar 2022
Edited: Matt J on 21 Mar 2022
A=[ 0 0 0 1 0 2 3 1 2 3 0 0 0
1 2 2 1 1 2 3 1 2 3 1 3 4
0 1 0 1 0 0 0 1 2 1 1 2 2
2 1 2 1 0 0 0 0 1 1 1 1 1
1 0 0 1 1 1 1 1 2 2 2 1 1];
B=A>0;
C=cummax(B,1);
D=double(B);
D(C&A==0)=inf;
D=sort(D,1);
D=D~=0 & ~isinf(D);
Anew=zeros(size(A));
Anew(D)=A(A~=0)
Anew = 5×13
0 0 0 1 0 2 3 1 2 3 0 0 0 1 2 2 1 1 2 3 1 2 3 1 3 4 2 1 2 1 1 1 1 1 2 1 1 2 2 1 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 2 2 2 1 1
  3 Comments
Matt J
Matt J on 21 Mar 2022
Edited: Matt J on 21 Mar 2022
It should work for any matrix and for any number of leading zeros, but you should definitely test these use cases if you have any doubts.

Sign in to comment.

More Answers (1)

Arif Hoq
Arif Hoq on 21 Mar 2022
if your matrix A almost same dimension( 5 X 13) everytime, then
A = [0 0 0 1 0 2 3 1 2 3 0 0 0;
1 2 2 1 1 2 3 1 2 3 1 3 4;
0 1 0 1 0 0 0 1 2 1 1 2 2;
2 1 2 1 0 0 0 0 1 1 1 1 1;
1 0 0 1 1 1 1 1 2 2 2 1 1];
B=A(:,1);
C=B(2:end);
C([2 end])=C([end 2]);
D=[B(1);C];
output=[D A(:,2:end)]
output = 5×13
0 0 0 1 0 2 3 1 2 3 0 0 0 1 2 2 1 1 2 3 1 2 3 1 3 4 1 1 0 1 0 0 0 1 2 1 1 2 2 2 1 2 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 2 2 2 1 1
  4 Comments
Sushil Pokharel
Sushil Pokharel on 21 Mar 2022
Actually, I want to move the trapped zeros in every column keeping all other elements fixed. 'descend' will shift '2' at the top. Also, this is the example of the matrix where we know the position of the zeros. But what is we don't know the position of zero. So I think if we can write a code in such a way that when ever it finds a zero it will shift that zeros to the bottom. I think previous one will work only when we know about the position of zeros. 'descend' will alter the position of other states like 2 3 4.
Sushil Pokharel
Sushil Pokharel on 22 Mar 2022
Dear Arif Hoq,
Thank you so much for your time. I really appreciate your help and for your immediate response.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!