У меня есть 1-мерный отсортированный массив, и я хотел бы найти все пары элементов, разница которых не превышает 5.
Наивным подходом было бы сделать N ^ 2 сравнений, делая что-то вроде
diffs = np.tile(x, (x.size,1) ) - x[:, np.newaxis]
D = np.logical_and(diffs>0, diffs<5)
indicies = np.argwhere(D)
Обратите внимание, что результатом моего примера являются индексы x
.Если бы я хотел значения x
, которые удовлетворяли бы критериям, я мог бы сделать x[indicies]
.Это работает для меньших массивов, но не для массивов того размера, с которыми я работаю.
У меня была идея найти места, где между последовательными элементами есть зазоры больше 5.Я бы разделил массив на две части и сравнил все элементы в каждой части.
Является ли это более эффективным способом поиска элементов, которые удовлетворяют моим критериям?Как я мог написать это?
Вот небольшой пример:
x = np.array([ 9, 12,
21,
36, 39, 44, 46, 47,
58,
64, 65,])
результат должен выглядеть следующим образом:
array([[ 0, 1],
[ 3, 4],
[ 5, 6],
[ 5, 7],
[ 6, 7],
[ 9, 10]], dtype=int64)