place value for elements which not in transition probability matrix.

1 view (last 30 days)
I have sequence
qq= [1 3 3 4 1 5 4 6 3]
and I am making transition probability matrix p as follows
1 3 4 5 6
1 0 0.5 0 0.5 0
3 0 0.5 0.5 0 0
4 0.5 0 0 0 0.5
5 0 0 1 0 0
6 0 1 0 0 0
then I have another sequence which have some different values than qq, i.e.
qq1=[1 3 2 2 3 4 1 7 7 8 3 9 1]
for window of 5 I am selecting first 5 elements i.e. 1 3 2 2 3 and then taking their relative transition probability values from matrix p. i.e. for 1 3 2 2 3, p(1,3), p(3,2), p(2,2), p(2,3). Now I am sliding window and skipping 1st element and adding next element so elements are 3 2 2 3 4 and calculating transition probability values from matrix p. now again next values 2 2 3 4 1 and doing same thing upto last window i.e. 7 8 3 9 1.
so for that code is as follows
nm=numel(qq1);
N=5;
for k=1:nm-N+1;
w=qq(k:k+N-1);
for t=1:N-1;
x=w(t);
x1=w(t+1);
pv=p(x,x1);
lg(t)=log(pv);
sm=sum(lg);
end
f(k)=sm;
end
now for p(1,7),p(7,7),p(8,3) there is no value in p matrix so for that I want to take value 0.01 i.e. p(1,7)=0.01, p(7,7)=0.01, p(8,3)=0.01 so how to do this by editing above code or separately.

Answers (1)

José-Luis
José-Luis on 14 Dec 2016
Edited: José-Luis on 14 Dec 2016
qq= [1 3 3 4 1 5 4 6 3] ;
[unik, ia, ib] = unique(qq,'stable');
subs = [ib(1:end-1) , ib(2:end)];
your_result = accumarray(subs, qq(1:end-1));
your_result = bsxfun(@rdivide,your_result,sum(your_result,2))

Community Treasure Hunt

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

Start Hunting!