我有一个序列x = [12,14,6,15,15,15,15,6,8,8,18,18,14,14]所以我想做转换概率矩阵。通过方程计算的转换概率矩阵即概率=(对x(t)跟随x(t + 1))/(对x(t)跟随任何状态的数量)。矩阵应该有如下如何在Matlab中编程以获得转换概率矩阵?
6 8 12 14 15 18
6 0 1/2 0 0 1/2 0
8 0 1/2 0 0 0 1/2
12 0 0 0 1 0 0
14 1/2 0 0 1/2 0 0
15 1/4 0 0 0 3/4 0
18 0 0 0 0 1/2 1/2
通过下面的代码我可以做
m = max(x);
n = numel(x);
y = zeros(m,1);
p = zeros(m,m);
for k=1:n-1
y(x(k)) = y(x(k)) + 1;
p(x(k),x(k+1)) = p(x(k),x(k+1)) + 1;
end
p = bsxfun(@rdivide,p,y); p(isnan(p)) = 0;
但这个码矩阵形式为了最大状态存在的顺序,即矩阵变为18 * 18的,以及更多的地方零发生。我想要矩阵像我上面发布如何做到这一点。
是这不同于[你关于转移概率矩阵的其他未回答的问题](http://stackoverflow.com/questions/37054721/how-to-obtain-transition-probability-matrix-in-matrix)? –
@AndrasDeak现在他想删除没有任何可能性的数字。 – xvan
@Rams这个问题是不合适的,删除所有与转换概率生成有关的信息,因为它与18 * 18矩阵和目标矩阵无关。 – xvan