''' 数组排序 1. sort sort是inplace=True的,lexsort是inplace=False的,所以想要看lexsort的排序效果,需要用lexsort函数返回的下标索引去获取元素观察。 2. lexsort。 对于多个数组,lexsort是把最后一个数组排序,再以这个排序方式去排前面的数组。 对于多维数组,lexsort是把最后一行排序,再以这个排序去排前面的行。 如果最后一个数组(或最后一行)里面有重复的,就根据重复元素对应到 前一个数组(或前一行)上的元素的大小顺序。依次类推。 ''' import numpy as np # arr = np.arange(16,0,-1) # 排序 # arr.sort() # print(arr) # def sort(self, axis=-1, kind='quicksort', order=None): # axis=1横向排序 # axis=0纵向排序 # kind选择排序算法 # order选择一个索引,对该索引下面的数据排序。在源码中有一个例子。 # arr2 = np.arange(16,0,-1).reshape(4,4) # arr2.sort(axis=1)#横向 # print(arr2) # arr2.sort(axis=0)#纵向 # print(arr2) # arr3 = np.arange(6,2,-1) # print(arr3.argsort())#返回排序后的元素在原来数组中的下标索引 # arr3 = np.array([3,4,6,5]) # print(arr3.argsort()) # arr4 = np.array([6,2,8,3]) # arr5 = np.array([12,65,98,34]) # arr6 = np.array([234,483,173,841]) # res = np.lexsort((arr4,arr5,arr6)) # print(res)[2 0 1 3] # print(type(res))<class 'numpy.ndarray'> surname = ('tom','jerry','an','jerry') surname2 = ('tom','jerry','zip','jerry')#相同元素排序,根据前一个数组first_name对应位置上的来排,如果前一数组也相同,再根据前前个,依次类推。 surname3 = ('tom','jerry','jerry','zip')# first_name = ('Bing','Cage','Obama','Dush') ind = np.lexsort((first_name,surname)) ind2 = np.lexsort((first_name,surname2)) ind3 = np.lexsort((first_name,surname3)) print(ind)#[2 3 1 0] print(ind2)#[1 3 0 2] print(ind3)#[1 2 0 3] # arr7 = np.array([[2,3],[6,4],[5,1]]) # res = np.lexsort(arr7) # print(res) # for r in res: # print(arr7[0][r]) # print(arr7[1][r]) # print(arr7[2][r])
data analysis(数组排序)
最新推荐文章于 2022-03-13 21:32:35 发布