NumPy在切片时更改值

时间:2017-07-26 22:00:02

标签: python numpy

我使用简单的公式

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中运行相同的东西,它就可以了。你能救我吗?

2 个答案:

答案 0 :(得分:2)

0.000105846998912等于1.05846999e-04

一个是科学记数法,另一个不是。

答案 1 :(得分:1)

大多数“浮点”都是错误的问题,与浮点的格式和内部表示之间的差异有关。计算机无法准确表示“格式化”的浮点。

要注意的是我使用的是什么样的浮点,例如,您可以检查是否使用了float32float64类型的数组。您可以通过输入以下内容来检查:

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控制台下运行它,我会得到相同的答案。