Это моя проблема, предположим, у меня есть такой вектор:
import numpy as np
idxx = np.array([0. , 0.07665982, 0.24366872, 0.49555099, 0.74743326,
1.07871321, 1.58247775, 2.24503765, 2.58179329, 3.16221766,
3.74811773, 4.1615332 , 4.58042437, 5.33059548])
Мне интересно отфильтровать только те значения, которые приблизительно кратны 0.25
, 0.5
и 1.0
.Давайте начнем с 0.25
, чтобы продемонстрировать, что я ищу для возврата фильтра:
np.array([0.24366872, 0.49555099, 0.74743326,
1.07871321, 1.58247775, 2.24503765, 2.58179329,
3.74811773, 4.58042437, 5.33059548])
Здесь остаются только значения, кратные 0.25
.На практике мне также нужно сохранить первую запись 0.0
, но я удалил ее для этой демонстрации.
Если я использую 0.5
, тогда мой результат будет выглядеть так:
np.array([0.49555099, 1.07871321, 1.58247775, 2.58179329, 4.58042437])
Мои первые попытки были:
import math
for i in idxx:
g = 0.25
k = i % g
if math.isclose(k, g, rel_tol=0.5):
print('This is reasonably close: ', i, '\n\t for modulus k == ', k, '\n')
Все еще требует от меня огромной настройки (и я все еще не могу отфильтровать то, что хочу), поэтому мне интересно, есть ли у кого-нибудь лучшеспособ сделать это правильно?
По сути, я хочу выбрать эти неправильные точки (например, 0,24366872), на «регулярно» разнесенной сетке (например, с шагом 0,25), но где каждая точка на регулярно разнесенной сеткеимеет некоторый допуск, например, +/- 0,05, чтобы учесть отклонения в реальных данных.Таким образом, позволяя мне находить те точки, которые находятся в пределах этой терпимости, в тех регулярно расположенных точках.