¿Cómo puedo escribir un número al múltiplo más cercano de 0.2 en numpy?

Por ejemplo, tengo esto:

0.2 * np.floor(xi / 0.2)

Funciona la mayor parte del tiempo, p.

>>> xi = 9.4
>>> 0.2 * np.floor(xi / 0.2)
9.4

Sin embargo, falla para algunos números, como 9.6

>>> xi = 9.6
>>> 0.2 * np.floor(xi / 0.2)
9.4

Esperaría que el cálculo anterior devuelva 9.4.

¿Cómo puedo arreglar esto?

2
Ginger 1 mar. 2020 a las 01:32

2 respuestas

Esto se debe a que el formato flotante: tenga en cuenta que 9.6/0.2 devuelve 47.9999999....

Algunos redondeos aquí y allá harán el truco:

round(0.2*np.floor(round(xi / 0.2,2)),1)

El redondeo interno es de 2 decimales, para asegurarse de que no perderá la precisión y que aún tendrá algo en el piso. El redondeo externo es, por lo que tendrá un redondeo adecuado a 0.2 (y no, por ejemplo, 9.6000...1)

1
Grzegorz Skibinski 29 feb. 2020 a las 23:03

Utilice np.round

0.2 * np.round(xi / 0.2)

Salida:

9.600000000000001

El poco extra se debe a las matemáticas de coma flotante.

1
rdas 29 feb. 2020 a las 22:38
60470225