我试图定义以下分布:
P(t) = exp(R*t)
其中R是2x2速率矩阵,我想用数据求解(每个行的总和必须为0)。这是对数似然函数,以及一些数据:
import numpy as np
# The data is in the format: (row index, column index, t)
data = {(0,1,10), (1,0,20), (0,0,49), (1,1,12)}
def logp(values, ratesMatrix):
r = []
t = []
for i in range(len(data)):
r.append(ratesMatrix[values[i][0], values[i][1]])
t.append(values[i][2])
r = np.array(r, dtype=np.float64)
t = np.array(t, dtype=np.float64)
# log( prod( exp(r*t) ) )
# == sum( log( exp(r*t) ) )
# == sum( r*t )
return np.sum(r*t)
如何将ratesMatrix变量定义为随机2x2矩阵,其中对角线中的每个条目介于-1和0之间(同样可能),并且在0到1之间的对角线之外(同样可能),使得每行的总和是0?
我认为这段代码很有用,而且非常简单:
import numpy as np
diagonal = np.random.randint(low=-1, high=1, size=2)
print(diagonal)
matrix = np.diag(diagonal)
if matrix[0, 0] == -1:
matrix[0, 1] = 1
if matrix[1, 1] == -1:
matrix[1, 0] = 1
print(matrix)
顺便问一下,这就是你要找的东西吗?