Удаление близких значений из массива - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть массив значений

array = [100, 101, 102, 102.001, 103.2, 104.64, 106.368, 108.442]

Значения 102 и 102.001 должны быть одинаковыми.Я хотел бы найти самый лучший способ удалить значение 102.001, а не 102.

Пока у меня есть громоздкий способ сделать это, но это удалит 102, если массивбыл перевернут;

import numpy as np
array = [100, 101, 102, 102.001, 103.2, 104.64, 106.368, 108.442]
array_diff = np.ediff1d(array)
ai = np.array(np.where(array_diff<0.01))
array_out = np.delete(array,[ai[0][0]+1])

Есть ли способ объединения / удаления значений с заданным допуском?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

решение vanilla python:

from itertools import groupby

def nearby_groups(arr, tol_digits=2):
  # split up sorted input array into groups if they're similar enough
  for (_, grp) in groupby(arr, lambda x: round(x, tol_digits)):
    # yield value from group that is closest to an integer
    yield sorted(grp, key=lambda x: abs(round(x) - x))[0]


array = [100, 101, 101.999, 102.001, 102, 103.2, 104.64, 106.368, 108.442]

print(list(nearby_groups(array)))

дает:

[100, 101, 102, 103.2, 104.64, 106.368, 108.442]

это решение предполагает предварительную сортировку ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...