np.unique(ar, return_index=False, return_inverse=False, return_counts=False,axis=None)
>>> import numpy as np>>> a=np.random.normal(size=(10))>>> aarray([-0.11357244, 0.95701868, -1.22541056, 0.17625916, -1.16635707, -1.51826177, 0.83400888, -0.18158241, -0.84685022, 0.09911596])
首先,随机生成一个一维数组》
然后分别看看函数中每个参数的作用
第一个,不使用参数时
>>> np.unique(a, return_index=False, return_inverse=False, return_counts=False,axis=None)array([-1.51826177, -1.22541056, -1.16635707, -0.84685022, -0.18158241, -0.11357244, 0.09911596, 0.17625916, 0.83400888, 0.95701868])
而此时a为:
>>> aarray([-0.11357244, 0.95701868, -1.22541056, 0.17625916, -1.16635707, -1.51826177, 0.83400888, -0.18158241, -0.84685022, 0.09911596])
也就是说这个函数没有改变原数组
实现了对数组排序。同时我们使用另一个矩阵看看。
>>> b=np.random.randint(0,5, size=(10))>>> barray([1, 4, 3, 0, 1, 0, 0, 1, 4, 4])>>> np.unique(b)array([0, 1, 3, 4])
对于含有重复元素的数组,提取其中所有出现元素,并且返回排序后结果。
对于二维数组:
>>> c=np.random.randint(0,5,size=(3,4))>>> np.unique(c)array([0, 1, 2, 3, 4])>>> carray([[1, 0, 2, 4], [1, 3, 3, 1], [1, 4, 0, 1]])
可见也是一样的。
现在看看参数的作用:
return_index=True
>>> np.unique(b, return_index=True)(array([0, 1, 3, 4]), array([3, 0, 2, 1], dtype=int64))
除了返回不含重复元素的一维数组,还有一个数组,对应前面那个一维数组中元素第一次出现的位置。
对于二维数组:
>>> np.unique(c, return_index=True)(array([0, 1, 2, 3, 4]), array([1, 0, 2, 5, 3], dtype=int64))
可以看见它是先把矩阵拉伸成一维数组,然后再排。(按行展)
return_inverse=True
对一维数组:
>>> np.unique(b, return_index=True, return_inverse=True)(array([0, 1, 3, 4]), array([3, 0, 2, 1], dtype=int64), array([1, 3, 2, 0, 1, 0, 0, 1, 3, 3], dtype=int64))
又多返回了一个数组,可以看出这个数组是返回原各个元素在第一个矩阵array([0,1,3,4])中的位置。
不难联想到我们常用的对数据进行数值化,关键在于它实现起来很方便。我们不妨把这个函数推广到元素为字符串的情况。
>>> d=np.array(['s','g','w','g','s','g','w'])>>> np.unique(d)array(['g', 's', 'w'], dtype='
不妨用来试试数值化:
>>> feat_dic, new_d = np.unique(d, return_inverse=True)>>> feat_dicarray(['g', 's', 'w'], dtype='
可以看到直接用np.unique()生成的new_d和用feat_dic生成的_d是一致的。
>>> np.unique(b, return_index=True, return_inverse=True, axis=-1)(array([0, 1, 3, 4]), array([3, 0, 2, 1], dtype=int64), array([1, 3, 2, 0, 1, 0, 0, 1, 3, 3], dtype=int64))>>> np.unique(c, return_index=True, return_inverse=True, axis=None)(array([0, 1, 2, 3, 4]), array([1, 0, 2, 5, 3], dtype=int64), array([1, 0, 2, 4, 1, 3, 3, 1, 1, 4, 0, 1], dtype=int64))>>> np.unique(c, return_index=True, return_inverse=True, axis=-1)(array([[0, 1, 2, 4], [3, 1, 3, 1], [4, 1, 0, 1]]), array([1, 0, 2, 3], dtype=int64), array([1, 0, 2, 3], dtype=int64))
对于一维数组,axis只能为0,-1.对于二维数组可以为0,1,-1.而且,对于一维sh数组,axis没有作用。而二维数组,aixs=1或-1.输出不同。
return_counts=True
>>> np.unique(b, return_counts=True)(array([0, 1, 3, 4]), array([3, 3, 1, 3], dtype=int64))
返回的第二个矩阵对应于第一个矩阵中元素在b中相应的出现次数。
————————————————
版权声明:本文为CSDN博主「AugustMoore」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/augustmoore/article/details/81608906