我有一个函数生成的numpy数组,如下所示

 circles = [[ 56, 152, 26],
 [288, 300, 25],
 [288, 362,  25],
 [288, 238,  24],
 [318, 298,  45],
 [220, 366, 29]]


我想检查每个子数组的第一个元素中的所有值是否一致(数学上接近,相差不大,即> 5),并删除不符合此条件的子数组。
因此,在这种情况下,我要删除任何大于288 + 5或小于288 - 5的子数组。有什么想法吗?

最佳答案

使用mode的可能解决方案:

>>> from scipy.stats import mode
>>> eps = 5
>>> most_freq = mode(circles[:, 0])[0][0]
>>> mask = np.abs(circles[:, 0] - most_freq) <= eps
>>> circles[mask]
array([[288, 300,  25],
   [288, 362,  25],
   [288, 238,  24]])


编辑:
如果您的circles数组限于非负整数,则可以对most_freq使用以下表达式:

most_freq = np.bincount(circles[:, 0]).argmax()

08-24 12:06