根据子数组中的第一个元素删除numpy子数组

时间:2018-09-07 05:56:36

标签: python numpy

我有一个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的子数组。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

使用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()