以下代码:
a = numpy.sin(2. * numpy.pi)
print(a < 0)
返回“True”。但实际上a = 0.我怎么能解决这个问题?另外,我有一个像“a”这样有很多价值的矩阵,我想确保我的矩阵包含非负值。
答案 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: