我有一个函数生成的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()