Eine andere einfache Möglichkeit besteht darin, das 1D-Array grundsätzlich zu sortieren: dh über jeden Punkt iterieren und die Werte abrufen, die sowohl in positiver als auch in negativer Richtung einen Mindestabstand dazu haben. Beispielsweise:
data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}
wird geben:
{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}
Welche Punkte, dass die Objekte in der Nähe eines bestimmten Punktes sind grundsätzlich unter seiner Gruppe. Das einzige, worüber man bei dieser Technik nachdenken muss, ist die Variable k, die die feste Größe des Clusters ist :-).