m = a.shape[0]
shifts_arr = np.zeros(m * (m - 1) / 2, dtype=int)
shifts_arr[np.arange(m - 1, 1, -1).cumsum()] = 1
idx1 = shifts_arr.cumsum()
selected_pts = a[~np.in1d(np.arange(m), idx1[distance.pdist(a) < d])]
Ускорение расстояния между всеми возможными парами в массиве