gpt4 book ai didi

python - Python 数组中非常小的数字会导致精度损失

转载 作者:太空狗 更新时间:2023-10-30 01:23:58 25 4
gpt4 key购买 nike

我有两个 float64 类型的数组,当我将第一个数组的值赋给第二个数组时,它会四舍五入该值。下面的简单代码说明了问题并排除了仅仅是数字表示的可能性。 (为了更具可读性,我已经将我的代码片段图解化了,但本质上是一样的)

X = zeros((2,2))
Y = zeros((2,2))
Z = X #a shorter way of making a new matrix, equal to X...
X[0,0] = Y[0,0]
Z[0,0]=0
print Y[0,0]
print X[0,0]
print type(Y[0,0])
print type(X[0,0])
if X[0,0]==Y[0,0]:
print'they are equal'
else:
print'they are NOT equal'

我为所有系数运行了这段代码,所有输出都与此类似:

1.90897e-14
0
<type 'numpy.float64'>
<type 'numpy.float64'>
they are NOT equal

在我看来,X数组是另一种类型,但它的创建方式相同,使用标准类型(float64)的zeros()函数

编辑:数组初始化为

X = zeros((2,2), dtype=float64)
Y = zeros((2,2), dtype=float64)

在上面的示例中还包含了额外的有用打印。

编辑:在我发现问题后添加了有问题的行

最佳答案

绝对确定 X 是一个 float64 数组吗?如果是,我希望 X[0,0] 为 0.0,但您看到的却是 0,在我看来它像一个整数..

>>> Xf = arange(10,dtype=float64)
>>> Xi = arange(10)
>>> Xf[0]
0.0
>>> Xi[0]
0
>>> Yf = Xf*0.0
>>> Yf[0]
0.0
>>>
>>> Yf[0] = 1.90897e-14
>>> Yf[0]
1.9089700000000001e-14
>>> Xf[0] = Yf[0]
>>> Xf[0]
1.9089700000000001e-14
>>> Xi[0] = Yf[0]
>>> Xi[0]
0

关于python - Python 数组中非常小的数字会导致精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7521120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com