Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数组中非常小的数字会导致精度损失_Python_Numpy - Fatal编程技术网

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

Python数组中非常小的数字会导致精度损失,python,numpy,Python,Numpy,我有两个float64类型的数组,当我将第一个数组的值赋给第二个数组时,它会对值进行四舍五入。下面的简单代码说明了这个问题,排除了仅仅用数字表示的可能性。(我已经对代码片段进行了模式化,以使其更具可读性,但本质上是一样的) 我为所有系数运行了这段代码,所有输出都与此类似: 1.90897e-14 0 <type 'numpy.float64'> <type 'numpy.float64'> they are NOT equal 在上面的例子中还包括了一个额外的有用的打印

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

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

1.90897e-14
0
<type 'numpy.float64'>
<type 'numpy.float64'>
they are NOT equal
在上面的例子中还包括了一个额外的有用的打印

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

您是否绝对确定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

您是否还可以包括创建
X
Y
的代码段?您是否还可以包括
打印类型(X),类型(Y)
的结果?@Diego:您何时调用“type(X[0,0])?在构建时还是在上述代码片段之前?我感兴趣的是后者——我想X在途中发生了一些事情。好吧,现在我很恼火。:-|如果我最喜欢的理论是正确的,那就不应该发生。你能发布一个从开始到结束的绝对最小的复制它的案例,以及你的python/numpy版本号吗?不要沮丧。不要责怪你的工具。只要学习语言。我想你忘了Q.E.D。当只传递形状时,零函数采用float64类型。。我将明确地将它们定义为float64,并在这里报告:)@Diego:我想的更多的是,你拥有的X不是你认为拥有的X。。
X = zeros((2,2), dtype=float64)
Y = zeros((2,2), dtype=float64)
>>> 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