我正在从事大学项目,关于模拟常规马尔可夫链,所以我必须确认每个矩阵的向量/行和为1。
以下是代码:
def checkingVector(vectorM):
y = 0
for x in range(0,nRC):
for z in range(0,nRC):
y += vectorM[x][z]
print y
if y != 1.0:
print y
return false
else :
y = 0
return true
validMatrix = checkingVector(m)
if validMatrix == false:
print "Invalid Matrix"
print m
else:
equationA = []
for x in range(0,nRC):
equationA.append(1)
equationA.append(0)
print equationA
print m
这样做效果很好,但是这个矩阵失败了
(0.6 0.3 0.1)
(0.2 0.5 0.3)
(0.1 0.2 0.7)
因此,此矩阵的每一行都等于1,当我将函数应用于此矩阵时,它返回无效矩阵。
我已经打印了y变量以确保它包含1并且它确实存在,但程序仍然是函数的连续性。
我做错了什么,如何解决?
答案 0 :(得分:0)
您是Floating Point Arithmetic: Issues and Limitations
的受害者In [1]: 0.6 + 0.3 + 0.1
Out[1]: 0.9999999999999999
浮点数不准确。因此,永远不要测试平等,而是测试
之类的东西if abs(y-1) <= 0.0000001:
# close enough
或使用decimal
module。