numpy.sin(pi)返回负值

时间:2014-01-03 12:12:18

标签: python numpy approximation sin

以下代码:

a = numpy.sin(2. * numpy.pi)
print(a < 0)

返回“True”。但实际上a = 0.我怎么能解决这个问题?另外,我有一个像“a”这样有很多价值的矩阵,我想确保我的矩阵包含非负值。

4 个答案:

答案 0 :(得分:4)

这是因为浮点算术和精度的原因。结果是sin的最佳近似值可以表示为浮点数。通常你会解决这样的近零问题:

a = numpy.sin(2. * numpy.pi)
print(abs(a) < 1e-10)

您可能还想阅读this

答案 1 :(得分:2)

实际上&lt;&gt; 0因为实际上numpy.pi不是Pi(无论如何,Pi是什么?) - 它只是它的近似值而numpy.sin不是正弦 - 它也是它的近似值。所以你必须考虑一些错误,例如

print( -0.0000001 < a < 0.0000001 )

或使用其他一些技巧(不同地表示Pi - 不是浮点数)。

答案 2 :(得分:1)

>>> import numpy
>>> a = numpy.sin(2. * numpy.pi)
>>> numpy.allclose(a, 0)
True
>>> numpy.clip(numpy.array([-0.1, 1.0, 2.0]), 0, np.inf)
array([ 0.,  1.,  2.])

答案 3 :(得分:0)

当我计算

numpy.sin(2 * numpy.pi)

我得到了

-2.4492935982947064e-16 # i.e. -0.0000000000000002

这是一个经典的float点精度误差。您最好采用容差方法来测试该值:

if abs(a) < 0.0001: