我使用简单的公式
beta = covariance[0,1]/covariance[1,1]
协方差是
[[ 1.96330748e-05 2.39329295e-05]
[ 2.39329295e-05 1.05846999e-04]]
我打印时
covariance[1,1]
NumPy返回0.000105846998912而不是1.05846999e-04,更改数组中原始项的值,只有当我在终端中运行此协方差[1,1]语句时,我才遇到此问题。如果我在Jupiter中运行相同的东西,它就可以了。你能救我吗?
答案 0 :(得分:2)
0.000105846998912
等于1.05846999e-04
。
一个是科学记数法,另一个不是。
答案 1 :(得分:1)
大多数“浮点”都是错误的问题,与浮点的格式和内部表示之间的差异有关。计算机无法准确表示“格式化”的浮点。
要注意的是我使用的是什么样的浮点,例如,您可以检查是否使用了float32或float64
类型的数组。您可以通过输入以下内容来检查:
covariance.dtype
您可以使用numpy中的set_printoptions
function设置值的详细信息。还要确保在不同的python版本中知道浮点值是printed的方式。
这就是你所谓的“可重复”的例子:
import numpy as np
covariance = np.array(
[
[1.96330748e-05, 2.39329295e-05],
[2.39329295e-05, 1.05846999e-04]
],
dtype="double"
)
print(covariance[1, 1])
print(repr(covariance[1, 1]))
print("{:.20f}".format(covariance[1, 1]))
beta = covariance[0, 1] / covariance[1, 1]
print("{:.20f}".format(beta))
# this generates the "wrong" answer you mention in the comments under your answer.
wrong_beta = covariance[0, 1] / covariance[0, 0]
print("{:.20f}".format(wrong_beta))
如果我使用python3.5在jupyter下运行它,我得到:
0.000105846999
0.000105846999
0.00010584699900000000
0.22610872038044271815
1.21901076340828695699
如果我在python控制台下运行它,我会得到相同的答案。