np.bincount、np.digitize、np.unique、np.histogram、np.searchsorted

np.bincount

简介

np.bincount是统计数组中数字出现数量的函数,数值n在输入数组x中每出现1次,则输出o的o[n]+=1。

函数

官方文档
函数参数:在这里插入图片描述

  • x: 输入,1维非负数组
  • weights: 权重数组, 可选参数,如果指定了这一参数, 则某个数值n在输入数组x中每出现1次,假设这个数在x中的索引值是i, 则输出o内的o[n]+=weights[i]
  • minlength: 输出数组最短长度,可选参数。若指定了这个值,则当输出长度不足minlength时,会自动用0补齐,保证输出长度不小于minlength。

example:

import numpy as np
a = [1, 5, 2, 3, 2, 3, 10, 2]
b = np.bincount(a)
print(b)
# b = array([0, 1, 3, 2, 0, 1, 0, 0, 0, 0, 1])

# 当minlength < max(a)时输出数组长度为max(a)
c = np.bincount(a, minlength=6)
print(c)
# c = array([0, 1, 3, 2, 0, 1, 0, 0, 0, 0, 1])
# 当minlength > max(a)时用0补齐
c = np.bincount(a, minlength=20)
# c = array([0, 1, 3, 2, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0])

# 指定weights时,len(a) 需要等于 len(weights)
w =  w = [0.1, 0.2, 0.3, 0.2, 0.2, 0.4, 0.5, 0.1]
c = np.bincount(a, weights=w)
print(c)
# c = array([0. , 0.1, 0.6, 0.6, 0. , 0.2, 0. , 0. , 0. , 0. , 0.5])

np.digitize

介绍

获取数组x中每个值在数组的bin的区间索引

函数

官方文档
函数参数:
在这里插入图片描述

  • x: array_like
    要分箱的输入数组。在NumPy 1.10.0 之前,此数组必须是一维的,但现在可以具有任何形状。
  • bins: array_like
    箱阵列。它必须是一维且单调的。
  • right: 布尔型,可选
    指示间隔是否包括右侧或左侧 bin 边。默认行为是 (right==False),表示区间不包括右边。在这种情况下,左 bin 端是打开的,即 bins[i-1] <= x < bins[i] 是单调递增 bins 的默认行为。
  • 返回indices: 整数数组
    索引的输出数组,形状与x.

example

a = np.array([0, 1.5, 2.0, 3.2, 4, 4.8, 11])
bins = np.array([1.0, 1.3, 2.5, 4.0, 4.5, 8, 10.0])
b = np.digitize(a, bins)
# b = array([0, 2, 2, 3, 4, 5, 7])

# 返回值与函数第一个参数的shape保持一致
a = np.array([[10.2, 21.4, 3.6, 14.8], [1.0, 5.0, 10.0, 15.0]])
bins = np.array([1.0, 1.3, 2.5, 4.0, 10.0])
b = np.digitize(a, bins)
# b = array([[5, 5, 3, 5], [1, 4, 5, 5]])

np.unique

介绍

去除其中重复的元素 ,并按元素 由小到大 返回一个新的无元素重复的元组或者列表

函数

官方文档
函数参数:
在这里插入图片描述

  • arr:输入数组,如果不是一维数组则会展开
  • return_index:如果为 true,返回新列表元素在旧列表中的位置(下标),并以列表形式存储。
  • return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式存储。
  • return_counts:如果为 true,返回去重数组中的元素在原数组中的出现次数。
  • axis: 如果没有, ar 将被展平。如果是整数,则由给定轴索引的子数组将被展平并被视为具有给定轴维度的一维数组的元素,默认值为“无”。New in version 1.13.0.

example

import numpy as np
A = [1, 2, 2, 5, 3, 4, 3]
a = np.unique(A)
# a = [1 2 3 4 5]

a, indices = np.unique(A, return_index=True)   # 返回新列表元素在旧列表中的位置(下标)
# a = [1 2 3 4 5]		 # 列表
# indices = [0 1 4 5 3]	 # 下标

a, indices = np.unique(A, return_inverse=True)   # 旧列表的元素在新列表的位置
# a = [1 2 3 4 5]	
# indices = [0 1 1 4 2 3 2]	 # 下标
# a[indices] = [1 2 2 5 3 4 3]    # 使用下标重构原数组

a, indices = np.unique(A, return_counts=True)    # 每个元素在旧列表里各自出现了几次
# a = [1 2 3 4 5]
# indices = [1 2 2 1 1]

B = ([1, 2], [2, 5], [3, 4])
b = np.unique(B)
# b = [1 2 3 4 5]
C= ['fgfh','asd','fgfh','asdfds','wrh']
c= np.unique(C)
# c = ['asd' 'asdfds' 'fgfh' 'wrh']

np.histogram

介绍

计算出数据的频数分布情况

函数

官方文档
函数参数:
在这里插入图片描述

  • bins参数:用于设置数据的划分方式,可以是整数,表示分段的个数,也可以是实数序列,表示分段的边缘值。默认为10,通常建议根据数据的实际情况进行调整。
  • range参数:用于设置数据的范围,计算出的频数分布将会在该范围内展示。同样可以是整数或实数序列,不设置时以数据集的最小值和最大值为范围。
  • density参数:用于确定频数分布是否标准化,即是否除以总数使得和为1。默认为False。
  • cumulative参数:用于计算累积频数分布,即小于等于该值的频数之和。默认为False。

example

import numpy as np
data = np.random.randn(1000)    # 随机生成1000个数据
hist, bins = np.histogram(data, bins=10)
# hist = array([ 11,  55, 110, 217, 271, 204,  94,  30,   7,   1])
# bins = array([-3.01272002, -2.33084453, -1.64896905, -0.96709357, -0.28521809, 0.3966574 ,  1.07853288,  1.76040836,  2.44228384,  3.12415933, 3.80603481])
hist, bins = np.histogram(data, bins=10, range=(0, 1))
# hist = array([50, 42, 34, 33, 34, 31, 32, 27, 39, 25])
# bins = array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])

refer

np.searchsorted

介绍

在数组a中插入数组v(并不执行插入操作),返回一个下标列表,这个列表指明了v中对应元素应该插入在a中那个位置上

函数

官方文档
函数参数:在这里插入图片描述

  • a : 1-D array_like

输入数组。当sorter参数为None的时候,a必须为升序数组;否则,sorter不能为空,存放a中元素的index,用于反映a数组的升序排列方式。

  • v : array_like
    插入a数组的值,可以为单个元素,list或者array。
  • side : {‘left’, ‘right’}, optional
    查询方向:
    当为left时,将返回第一个符合条件的元素下标;(默认)
    当为right时,将返回最后一个符合条件的元素下标,如果没有符合的元素,将返回0或者N(a的长度)
  • sorter : 1-D array_like, optional
    存放a数组元素的index,index对应元素为升序。

example

# 正常搜索数组中的一个数字
e = np.array([1, 2, 3, 4])
f = np.searchsorted(e, 4)
# f = 3
# 搜索数组中没有的数字
h = np.searchsorted(e, 5)
# h = 4
# 如果数组不是从小到大的,会自动从小到大排列一遍
j = np.array([2, 0, 2, 1])
k = np.searchsorted(j, [2, 0])
# k = [2 0]

# 搜索多个值,如果是多个值的话,就是返回一个个的索引,不是一起插入返回的
i = np.searchsorted(e, [5, 6])
# i = [4 4]

g = np.searchsorted(e, 3, side="right")
# g = 3

a = np.array([0,1,5,9,11,18,26,33])
np.random.shuffle(a)
# a = [0 5 26 33 11 9 18 1]
a_sort = np.argsort(a)
# a_sort = [0 7 1 5 4 6 2 3]
result16 = np.searchsorted(a, [-1, 0, 11, 15, 33, 35], side='left', sorter=a_sort)
# result16 = [0 0 4 5 7 8]
result17 = np.searchsorted(a, [-1, 0, 11, 15, 33, 35], side='right', sorter=a_sort)
# result17 = [0 1 5 5 8 8]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值