我需要计算并存储一个条件概率表(对于贝叶斯网络),它是从一个矩阵中提取出来的,它的输入是N(每个节点的唯一阈值数)和T(一个节点可以拥有的父节点数)。T的值通常在1到10之间,N的范围通常是3到7。在
例如
If N = 5, and T = 1 the values will be 5^1=5
if N = 5, and T = 2 the values will be 5^2 = 25
if N = 5, and T = 3 the values will be 5^3 = 125
(and so on).
N的值也可以改变,但我保持示例简单。在
所需输出为: (对于T=1&N=5,输出应为5^1=5,即1*5矩阵 [0.2,0.2,0.2,0.2,0.2]):
^{pr2}$(对于T=2&N=5,输出应为5^2=25,即5*5矩阵):
T_Id Cell_Id Probability
T002 1 0.732292842
T002 2 0.232364214
T002 3 0.033319518
T002 4 0.001977041
T002 5 4.63852E-05
T002 6 0.188558672
T002 7 0.59424024
T002 8 0.188558672
T002 9 0.027038088
T002 10 0.001604327
T002 11 0.026367464
T002 12 0.183881865
T002 13 0.579501342
T002 14 0.183881865
T002 15 0.026367464
T002 16 0.001604327
T002 17 0.027038088
T002 18 0.188558672
T002 19 0.59424024
T002 20 0.188558672
T002 21 4.63852E-05
T002 22 0.001977041
T002 23 0.033319518
T002 24 0.232364214
T002 25 0.732292842
同样,对于T=3&N=5,输出应该是5^3=125,依此类推。。。。在
如何在Python中实现这一点,同时考虑T&N组合的可伸缩性?在
注:使用下面的代码可以实现类似的功能,但它使用随机值作为输入,是否可以修改下面的代码以获得如上所示的结果?在
import random
precision = 1000
def f(n) :
matrix = []
for l in range(n) :
lineLst = []
sum = 0
crtPrec = precision
for i in range(n-1) :
val = random.randrange(crtPrec)
sum += val
lineLst.append(float(val)/precision)
crtPrec -= val
lineLst.append(float(precision - sum)/precision)
matrix.append(lineLst)
return matrix
matrix = f(5)
print matrix
以上输出示例:
[[0.64, 0.229, 0.043, 0.034, 0.054],
[0.847, 0.04, 0.068, 0.04, 0.005],
[0.758, 0.148, 0.006, 0.027, 0.061],
[0.159, 0.477, 0.329, 0.023, 0.012],
[0.817, 0.146, 0.026, 0.01, 0.001]]
预期输出(如果N=5,即f(5)):
[[0.7322, 0.2323, 0.0333, 0.0019, 4.63852E-05],
[0.1885, 0.5942, 0.1885, 0.0270, 0.0016],
[0.0263, 0.1838, 0.5795, 0.1838, 0.0263],
[0.0016, 0.0270, 0.1885, 0.5942, 0.1885],
[4.63852E-05, 0.0019, 0.0333, 0.2323, 0.7322]]
目前没有回答
相关问题 更多 >
编程相关推荐