Python numpy / math isclose - нужно проверить, меньше ли значение с плавающей точкой или больше, чем значение с плавающей точкой с порогом - PullRequest
0 голосов
/ 30 марта 2019

Я прочитал несколько постов в похожих строках, где мы пытаемся сравнить два числа с плавающей запятой (да, это ошибка с плавающей запятой) на основе относительного допуска и натолкнулись на math.isClose() и numpy.isclose() api.Эти API прекрасно работают, но мое требование - найти, находится ли вычитание двух чисел с плавающей точкой в ​​пределах порога.Так что, если я найду меньше или больше чем равно, это будет работать для меня.

Любая идея, как я могу решить эту проблему?

import numpy
import pandas as pd
from decimal import Decimal
data = {'first': [1.71, 1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.80], 'second': [1.72, 1.73, 1.74, 1.75, 1.76, 1.77, 1.78, 1.79, 1.80, 1.81]}
df = pd.DataFrame(data, columns = ['first', 'second'])
df['isGtEq'] = df.apply (lambda row: (row['first'] - row['second']) >= 0.01, axis=1)
df['isclose'] = df.apply (lambda row: numpy.isclose(row['first'], row['second'], atol=0.01), axis=1)
df['absdiff'] = df.apply (lambda row: abs(row['first'] - row['second']), axis=1)
df['dec_diff'] = df.apply (lambda row: Decimal(row['first'] - row['second']), axis=1)

Результат выполнения выше:

   first  second  isGtEq  isclose  absdiff  \
0   1.71    1.72   False     True     0.01
1   1.72    1.73   False     True     0.01
2   1.73    1.74   False     True     0.01
3   1.74    1.75   False     True     0.01
4   1.75    1.76   False     True     0.01
5   1.76    1.77   False     True     0.01
6   1.77    1.78   False     True     0.01
7   1.78    1.79   False     True     0.01
8   1.79    1.80   False     True     0.01
9   1.80    1.81   False     True     0.01

                                            dec_diff
0  -0.0100000000000000088817841970012523233890533...
1  -0.0100000000000000088817841970012523233890533...
2  -0.0100000000000000088817841970012523233890533...
3  -0.0100000000000000088817841970012523233890533...
4  -0.0100000000000000088817841970012523233890533...
5  -0.0100000000000000088817841970012523233890533...
6  -0.0100000000000000088817841970012523233890533...
7  -0.0100000000000000088817841970012523233890533...
8  -0.0100000000000000088817841970012523233890533...
9  -0.0100000000000000088817841970012523233890533...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...