您可以想象这样的事情,使用sklearn.metrics.pairwise_distances
来计算所有成对距离:
from sklearn.metrics import pairwise_distances
# Get all pairwise distances
distances = pairwise_distances(np.array(arr0).reshape(-1,1),metric='l1')
# Sort the neighbors by distance for each element
neighbors_matrix = np.argsort(distances,axis=1)
result_indexes = []
result_values = []
used_indexes = set()
for i, neighbors in enumerate(neighbors_matrix):
# Skip already used indexes
if i in used_indexes:
continue
# Remaining neighbors
remaining = [ n for n in neighbors if n not in used_indexes and n != i]
# The closest non used neighbor is in remaining[0] is not empty
if len(remaining) == 0:
continue
if distances[i,remaining[0]] < threshold:
result_indexes.append((i,remaining[0]))
result_values.append((arr0[i],arr0[remaining[0]]))
used_indexes = used_indexes.union({i,remaining[0]})
在您的示例中,它产生:
>> result_indexes
[(0, 1), (2, 4)]
>> result_values
[(40, 55), (190, 175)]