大部分「浮點」都是錯誤的問題,與格式化和浮點內部表示之間的差異有關。計算機無法準確表示「格式化」的浮點數。
需要注意的是我使用的是什麼樣的浮點,例如在這裏,您可以檢查是否使用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控制檯運行我得到相同的答案。
兩者是相同的。唯一的區別是*如何* numpy和Python重複浮點。 –
是的,但爲什麼當我做協方差[0,1]我得到2.39329295e-05並且不能得到協方差[1,1]的1.05846999e-04? –
因爲當值小於1e-4時,Python將使用科學記數法。編寫0.000000000011231211414相當難看。 –