Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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 dot产品的numpy机器精度?_Python_Numpy - Fatal编程技术网

Python dot产品的numpy机器精度?

Python dot产品的numpy机器精度?,python,numpy,Python,Numpy,如何处理numpy中的浮点精度?例如,在下面的a==0中,返回False,即使在机器精度范围内为0: a = -2.22044605e-16 这是一个特别的问题,因为我使用向量的点积,结果似乎受到影响,即a被视为“负数” np.finfo(float).eps 返回-2.22044605e-16 以下是一个例子: a = np.array([[-2.22044605e-16,-2.22044605e-16]]) b = np.array([[5,5]]) np.dot(a,b) arr

如何处理numpy中的浮点精度?例如,在下面的
a==0
中,返回False,即使在机器精度范围内为0:

a = -2.22044605e-16
这是一个特别的问题,因为我使用向量的点积,结果似乎受到影响,即a被视为“负数”

np.finfo(float).eps 
返回-2.22044605e-16

以下是一个例子:

a = np.array([[-2.22044605e-16,-2.22044605e-16]])

b = np.array([[5,5]])

np.dot(a,b)
array([[ -2.22044605e-15]])

a = np.array([[-2.22044605e-16,2.22044605e-16]])
np.dot(a,b.T)
array([[ 0.]])
试试看

从链接:

numpy.allclose(a、b、rtol=1e-05、atol=1e-08)

如果两个数组在公差范围内元素相等,则返回True

公差值为正值,通常为非常小的数字。这个 相对差(rtol*abs(b))和绝对差 加在一起,以对比 a和b

如果任一数组包含一个或多个NAN,则返回False。INF是 如果它们位于同一位置且具有相同的登录,则视为平等 两个阵列


如果以下等式为元素态True,则allclose返回
True

    absolute(a - b) <= (atol + rtol * absolute(b))
所以:

而不是做:

>>> 0 == -2.22044605e-16
False
做:

试试看

从链接:

numpy.allclose(a、b、rtol=1e-05、atol=1e-08)

如果两个数组在公差范围内元素相等,则返回True

公差值为正值,通常为非常小的数字。这个 相对差(rtol*abs(b))和绝对差 加在一起,以对比 a和b

如果任一数组包含一个或多个NAN,则返回False。INF是 如果它们位于同一位置且具有相同的登录,则视为平等 两个阵列


如果以下等式为元素态True,则allclose返回
True

    absolute(a - b) <= (atol + rtol * absolute(b))
所以:

而不是做:

>>> 0 == -2.22044605e-16
False
做:


虽然
a
可能等于,但并不等于零!实际上,
2.22044605e-16
远大于float64的最小可表示值,即:

np.finfo(float).tiny  # = 2.2250738585072014e-308

我猜你在这里看到的是。在第二个示例中,您很幸运,舍入错误被抵消。

尽管a可能等于,但它不等于零!实际上,
2.22044605e-16
远大于float64的最小可表示值,即:

np.finfo(float).tiny  # = 2.2250738585072014e-308

我猜你在这里看到的是。在第二个示例中,幸运的是,舍入误差被抵消了。

处理浮点精度的确切含义是什么?
-2.22044605e-16
在机器精度之前不是零(并且是负数)。。。我不确定你的意思……你误解了
分辨率属性。它是
10**-precision
,其中
precision
是您正在检查的浮点类型可用的精度小数位数的近似值。因此,
resolution
是一个(相当糟糕的)最小值的近似值,可以添加到
1.0
,而不必返回
1.0
。参见.np.finfo(float).eps返回-2.22044605e-16。我该怎么解释呢?[5,5]。点。[-x,x]=-5x+5x=0,不管x是什么,也就是说,x可以是2.22044605e-16或其他任何东西。处理浮点精度的确切含义是什么?
-2.22044605e-16
不等于零,而等于机器精度(它是一个负数)。。。我不确定你的意思……你误解了
分辨率属性。它是
10**-precision
,其中
precision
是您正在检查的浮点类型可用的精度小数位数的近似值。因此,
resolution
是一个(相当糟糕的)最小值的近似值,可以添加到
1.0
,而不必返回
1.0
。参见.np.finfo(float).eps返回-2.22044605e-16。我该怎么解释呢?[5,5]。点。[-x,x]=-5x+5x=0,不管x是什么,也就是说,x可以是2.22044605e-16或其他任何东西。0==-2.22044605e-16实际上不是我正在做的,这只是一个例子。重点是,如果我有两个数组,a和b,其中有一堆-2.22044605e-16,我取它们的点积,结果是不同的(见问题中的加法),这是一个很好的精度问题的答案。事实上,由于他的向量值被初始化为O(1e-16),我不认为精度是这里的问题。0==-2.22044605e-16实际上不是我要做的,这只是一个例子。重点是,如果我有两个数组,a和b,其中有一堆-2.22044605e-16,我取它们的点积,结果是不同的(见问题中的加法),这是一个很好的精度问题的答案。事实上,因为他的向量值被初始化为O(1e-16),所以我不认为精度是这里的问题。