numpy.sin (pi) devuelve un valor negativo

El siguiente código:

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

devuelve “True”. Pero en realidad a = 0. ¿Cómo podría arreglar eso? Además, tengo una matriz con mucho valor como “a” y quiero asegurarme de que mi matriz contenga un valor no negativo.

Esto debido a la aritmética de punto flotante, y razones de precisión. El resultado es la mejor aproximación del sin uno puede representar como un número de punto flotante. Por lo general, resuelves problemas cercanos a cero como este:

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

También es posible que desee leer esto .

En realidad un <> 0 porque en realidad numpy.pi no es Pi (¿qué es Pi en realidad de todos modos?) – es solo su aproximación y numpy.sin no es seno – también es su aproximación. Así que hay que tener en cuenta algún error, por ejemplo.

 print( -0.0000001 < a < 0.0000001 ) 

o use algunos otros trucos (que representan a Pi de manera diferente, no como un número flotante).

 >>> 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.]) 

Cuando calculo

 numpy.sin(2 * numpy.pi) 

yo obtengo

 -2.4492935982947064e-16 # ie -0.0000000000000002 

Este es un error clásico de precisión de punto float . Es mejor adoptar un enfoque de tolerancia para probar el valor:

 if abs(a) < 0.0001: