程序仅在某些初始条件下才能正确运行
Program works correcly only with certain initial conditions
如果一个方阵的元素是非负的,并且每行的和为1,那么这个方阵被称为随机的。例如,下面的矩阵是随机的:
[0.3, 0.7]
[0.9, 0.1]
众所周知,随机矩阵的任何幂仍然是随机的。我编写了一个程序来验证这一事实,但我 运行 遇到了一个问题:该程序适用于某些随机矩阵,但不适用于其他矩阵。这是我的代码:
import numpy as np
def main(p):
# Stochastic matrix A
A = np.array([[0.3, 0.7],
[0.2, 0.8]])
# Identity matrix
B = np.array([[1, 0],
[0, 1]])
# Check if powers of A are stochastic
for i in range(p):
B = B @ A
print(B)
if (sum(B[0,]) == 1) and (sum(B[1,]) == 1):
print("Good")
else:
print("Bad")
return(0)
main(5)
对于这个特定的 A,程序运行良好;它每次都打印出“Good”,我可以用手检查 A 的所有幂都是随机的。
但是,如果我们改用
A = np.array([[0.3, 0.7],
[0.5, 0.5]])
然后有些东西坏了;当我手动检查时,A 的幂仍然是随机的。但是程序打印出一个“Good”和四个“Bads”。你能帮我找出问题所在吗?
我相信这是浮点精度。经验教训:避免将两个浮点数与 ==
.
进行比较
Numpy 对此有 allclose
方法:
if np.allclose(B.sum(axis=1),1):
print("Good")
else:
print("Bad")
如果一个方阵的元素是非负的,并且每行的和为1,那么这个方阵被称为随机的。例如,下面的矩阵是随机的:
[0.3, 0.7]
[0.9, 0.1]
众所周知,随机矩阵的任何幂仍然是随机的。我编写了一个程序来验证这一事实,但我 运行 遇到了一个问题:该程序适用于某些随机矩阵,但不适用于其他矩阵。这是我的代码:
import numpy as np
def main(p):
# Stochastic matrix A
A = np.array([[0.3, 0.7],
[0.2, 0.8]])
# Identity matrix
B = np.array([[1, 0],
[0, 1]])
# Check if powers of A are stochastic
for i in range(p):
B = B @ A
print(B)
if (sum(B[0,]) == 1) and (sum(B[1,]) == 1):
print("Good")
else:
print("Bad")
return(0)
main(5)
对于这个特定的 A,程序运行良好;它每次都打印出“Good”,我可以用手检查 A 的所有幂都是随机的。
但是,如果我们改用
A = np.array([[0.3, 0.7],
[0.5, 0.5]])
然后有些东西坏了;当我手动检查时,A 的幂仍然是随机的。但是程序打印出一个“Good”和四个“Bads”。你能帮我找出问题所在吗?
我相信这是浮点精度。经验教训:避免将两个浮点数与 ==
.
Numpy 对此有 allclose
方法:
if np.allclose(B.sum(axis=1),1):
print("Good")
else:
print("Bad")