numpy.searchsorted:在已排序的数组寻找元素

np.searchsorted()是一个在有序数组上执行二分查找的数组方法,返回数组中需要插入值的位置以保持排序:

arr = np.array([0, 1, 7, 12, 15])
arr.searchsorted(9)
'''3'''

# 传递值数组,获取索引数组,默认返回一组相等值左侧的索引
# 因此,传递值0,应当插入索引为0的位置
arr.searchsorted([0, 8, 11, 16])
'''array([0, 3, 3, 5], dtype=int64)'''
arr = np.array([0, 0, 0, 1, 1, 1, 1])
arr.searchsorted([0, 1])
'''array([0, 3], dtype=int64)'''

# 传递side='right',返回一组相等值右侧的索引
arr.searchsorted([0, 1], side='right')

np.searchsorted()应用举例:

# 创建介于0~1000之间的均匀分布的随机数的数值
data = np.floor(np.random.uniform(0, 10000, size=50))
# 创建想用来分割数据的单独的’桶边界‘数组
bins = np.array([0, 100, 1000, 5000, 10000])
data
'''
array([9296., 3163., 1839., 2045., 5677., 5955., 9645., 6531., 7489.,
       6535., 7477., 9613.,   83., 1064., 2987., 6564., 8098., 8721.,
       9646., 7236., 6424., 7174., 4675., 3255., 4396., 7296., 9940.,
       6768., 7908., 1709.,  268., 8003., 9037.,  246., 4917., 5262.,
       5963.,  519., 8950., 7282., 8183., 5002., 8101.,  959., 2189.,
       2587., 4681., 4593., 7095., 1780.])
'''

# 用np.searchsorted()得到每个数据点属于哪个区间的标签
# 其中1代表[1,1000)
labels = bins.searchsorted(data)
labels
'''
array([4, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 1, 3, 3, 4, 4, 4, 4, 4, 4, 4,
       3, 3, 3, 4, 4, 4, 4, 3, 2, 4, 4, 2, 3, 4, 4, 2, 4, 4, 4, 4, 4, 2,
       3, 3, 3, 3, 4, 3], dtype=int64)
'''

# 与pd.groupby()一起用于分箱数据
pd.Series(data).groupby(labels).mean()
'''
1      83.000000
2     498.000000
3    3058.666667
4    7562.366667
dtype: float64
'''

其他可参考资源:https://blog.csdn.net/qq_33757398/article/details/89876088

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值