Как убирать лишние точки из файла, чтобы в нем были только ближайшие точки к точкам другого файла?

Добрый день.
У меня возникла проблема при нахождении ближайшей по x точке и фильтрации этих точек. Т.е. из модельного графика нужно убрать все те, которые не имеют ближайшего из эксперимента.
f = open('model.dat', "r", encoding="utf-8")
model = []
for i in f:
    model.append([i.split()[0], i.split()[1]])
f.close()

f = open("data.dat", "r", encoding="utf-8")
data = []
for i in f:
    data.append([i.split()[0], i.split()[1]])
f.close()

b = data
m = len(b)

for i in range(len(b)):
    b[i] = [i + 1, b[i]]
b.sort(key=lambda x: x[1])


def find_value(x):
    if x < b[0][1]:
        return b[0][0]
    if x > b[-1][1]:
        return b[-1][0]
    l = 0
    r = len(b) - 1
    while r - l > 1:
        m = (r + l) >> 1
        if b[m][1] < x:
            l = m
        else:
            r = m
    if x - b[l][1] < b[r][1] - x:
        return b[l][0]
    else:
        return b[r][0]


print(*[find_value(v) for v in model])

Но он выдает ошибку в типе, то есть пишет, что список в if x - b[l][1] < b[r][1] - x: не подходит, хотя для другого двумерного случая все работало. Можете ли подсказать что здесь не так или как можно это сделать по другому?
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Во-первых, где вы тут нашли график? Тут есть просто два набора двумерных точек. И не более того.
Во-вторых, вы считаете, что мы способны догадаться какую "ошибку на задание модельного графика" выдает вам интерпретатор?? Что за "задание"???
В-третьих, файлы вы то пооткрывали, а вот читать что-то из них вы забыли?
Исправьте, покажите, что там получилось и приходите за дальнейшей консультацией.

P.S. А вообще-то, если подумать, то задачи и сформулирована некорректно. В модельном ряду ВСЕ точки имеют ближайшую по х из ряда data. Другое дело, как далеко эти точки отстоят друг от друга.
А выглядят ваши графики, вернее их осмысленная часть, вот так:
5ee7a891c1687530777372.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы