我试图从时间序列数据计算转移矩阵。我编写了一个自定义函数,如下代码所示
def compute_transition_matrix(data, n, step = 1):
P = np.zeros((n, n))
m = len(data)
for i in range(m):
initial, final = i, i + step
if final < m:
P[data[initial]][data[final]] += 1
sums = np.sum(P, axis = 1)
for i in range(n):
for j in range(n):
P[i][j] = P[i][j] / sums[i]
return P
print(compute_transition_matrix([3, 0, 1, 3, 2, 6, 5, 4, 7, 5, 4], 8, 1))
在上述函数中,数据是输入的时间序列数据,n是马尔可夫链中状态的总数,步骤是过渡步骤
作为一个例子,我拿
data = [3, 0, 1, 3, 2, 6, 5, 4, 7, 5, 4]
n = 8 (this means there are 8 states in Markov chain from 0 - 7, both inclusive)
step = 1
然而,我只是想知道是否有一种方法可以使用NumPy/pandas/scikit中的内置函数来实现这一点
我不确定是否有内置函数来实现这一点,但我可以考虑在
numpy
(使用fancy indexing,{a2}和stride tricks)中这样做:代码的结果:
我的代码中的中间值:(供参考)
t_strided =
inds, counts =
时间比较:
相关问题 更多 >
编程相关推荐