1 python数据分析numpy基础之unique对数组元素去重
python的numpy库的unique()函数,用于查找数组的唯一元素,即对数组元素去重,重复的元素只保留一个,并返回排序后的数组。
用法
numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True)
描述
numpy.unique()返回沿指定轴去重后的数组。
入参
a:必选,需要去重的数组或元组或列表。
return_index:可选,bool,表示是否返回去重后元素在原始数组第1次出现的索引;
return_inverse:可选,bool,表示是否返回原始数组元素在去重后数组中的索引;
return_counts:可选,bool,表示是否返回去重后元素在原始数组中出现的次数;
axis:可选,整数,指定要排序的轴,默认为-1,沿最后一个轴排序。如果为None,则转为一维数组进行排序。
1.1 入参a
numpy.unique()的入参a,为必选入参,可以为数组、列表、元组。
>>> import numpy as np
# unique()返回元素去重后有序的数组
# 入参a为列表
>>> np.unique([6,6,5,5,8,8])
array([5, 6, 8])
# 入参a为元组
>>> np.unique((6,6,5,5,8,8))
array([5, 6, 8])
# 入参a为数组
>>> np.unique(np.array((6,6,5,5,8,8)))
array([5, 6, 8])
1.2 入参return_index
numpy.unique()的入参return_index,为可选入参,为bool值,表示是否返回元素在未去重数组中的索引。默认为False,不返回元素索引,否则返回元素在原始数组(未去重的数组)第1次出现的索引。
>>> import numpy as np
# return_index=True,返回元素在原始数组第1次出现的索引
>>> ar1=np.array(['a','r','r','a','y'])
>>> ue,eid=np.unique(ar1,return_index=True)
>>> ue
array(['a', 'r', 'y'], dtype='<U1')
>>> eid
array([0, 1, 4], dtype=int64)
# 通过索引获取值
>>> ar1[eid]
array(['a', 'r', 'y'], dtype='<U1')
# return_index=False,不返回索引
>>> np.unique(ar1,return_index=False)
array(['a', 'r', 'y'], dtype='<U1')
1.3 入参return_inverse
numpy.unique()的入参return_inverse,为可选入参,为bool值,表示是否返回元素在去重后的数组中的索引。默认为False,不返回元素索引,否则返回元素在去重且排序后的数组中的索引。通过此索引可以重建去重前数组。
>>> import numpy as np
# return_inverse=True,返回ar1元素在去重后数组的索引位置
>>> ar1=np.array(['a','r','r','a','y'])
>>> ue,eid=np.unique(ar1,return_inverse=True)
>>> ue
array(['a', 'r', 'y'], dtype='<U1')
>>> eid
array([0, 1, 1, 0, 2], dtype=int64)
# 通过去重后索引位置重构去重前数组
>>> ar1[eid]
array(['a', 'r', 'r', 'a', 'r'], dtype='<U1')
1.4 入参return_counts
numpy.unique()的入参return_counts,为可选入参,为bool值,表示是否返回去重后的元素在原始数组中出现的次数。默认为False,不返回元素次数,True则返回元素次数。
>>> import numpy as np
# return_counts=True,返回去重且排序后的元素在原始数组出现的次数
>>> ar1=np.array(['a','r','r','a','y'])
>>> vs,cs=np.unique(ar1,return_counts=True)
>>> vs
array(['a', 'r', 'y'], dtype='<U1')
>>> cs
array([2, 2, 1], dtype=int64)
>>> np.repeat(vs,cs)# 与去重后数组相同顺序
array(['a', 'a', 'r', 'r', 'y'], dtype='<U1')
1.5 入参axis
numpy.unique()的入参axis为可选入参,只能为整数(不支持元组),范围[0, ndim)。axis=None,则多维数组则转换为一维数组后进行去重。
若axis=n为整数,则沿指定轴n去重。
若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> import numpy as np
# return_counts=True,返回去重且排序后的元素在原始数组出现的次数
>>> ar2=np.array([[2,0,0],[2,0,0],[3,5,8]])
>>> ar2
array([[2, 0, 0],
[2, 0, 0],
[3, 5, 8]])
# axis=None,多维数组转一维数组后去重
>>> np.unique(ar2)
array([0, 2, 3, 5, 8])
# axis=0沿0轴去重
>>> np.unique(ar2,axis=0)
array([[2, 0, 0],
[3, 5, 8]])
# axis=1沿1轴去重,保留去重后元素最多的结构
>>> np.unique(ar2,axis=1)
array([[0, 0, 2],
[0, 0, 2],
[5, 8, 3]])
# 若axis=负数,则-1对应最后一个轴,-2倒数第2个轴,依此类推。
>>> np.unique(ar2,axis=-1)
array([[0, 0, 2],
[0, 0, 2],
[5, 8, 3]])
>>> ar2_1=np.array([[2,0,0],[2,0,0],[3,5,5]])
>>> np.unique(ar2_1,axis=1)
array([[0, 2],
[0, 2],
[5, 3]])
>>> ar2_1
array([[2, 0, 0],
[2, 0, 0],
[3, 5, 5]])