在此结构中,我有一个numpy的维度值数组:
arr = array([[3067, 78, 3172, 134],
[3237, 89, 3394, 128],
[3475, 87, 3743, 141],
[3763, 86, 3922, 131],
[3238, 147, 3259, 154]])
它基本上存储屏幕上数据的位置,其中的值表示为:[x_left, y_top, x_right, y_bottom]]
我只需要使用x_left
值,因为我试图找到页面上最有可能找到这些对象的位置。
我知道scipy.mode
,它返回模式值。有没有一种方法可以返回多个模式,例如给定numpy列中的前10个模式值?更好的是,有没有一种使用模式的方式,以使模式在给定范围内?例如,上面的行具有x_left
和3237
的{{1}}值,它们的位置非常接近。有没有办法将这两个值计算为一个单一模式值?
答案 0 :(得分:1)
您可以将numpy数组列转换为熊猫系列,然后使用.value_counts()
import pandas as pd
x_left = pd.Series(arr[:,0])
x_left.value_counts()
#3475 1
#3237 1
#3067 1
#3763 1
#3238 1
#dtype: int64
您还可以将值四舍五入,例如最接近的10个整数,以将范围之间的值分组。
def customRound(x, base=10):
return base * round(x/base)
x_left_round = x_left.apply(customRound)
x_left_round.value_counts()
#3240 2
#3760 1
#3070 1
#3480 1
#dtype: int64
然后您可以看到您有两个接近3240的x_left
值