Python中不同排序技术的变化
这些都是表现非常不同的排序技术的不同类型。让我们研究哪种技术如何工作以及使用哪种技术。
让 'a' 成为一个 numpy 数组
- a.sort()
(i) 就地对数组进行排序并返回 None
(ii) 返回类型为无
(iii) 占用更少的空间。没有创建副本,因为它直接对原始数组进行排序
(iv) 比排序更快(a)# Python code to sort an array in-place # using a.sort import numpy as np # Numpy array created a = np.array([9, 3, 1, 7, 4, 3, 6]) # unsorted array print print('Original array:\n', a) # Return type is None print('Return type:', a.sort()) # Sorted array output print('Original array sorted->', a)
OUTPUT: For a.sort() Original array: [9 3 1 7 4 3 6] Return type: None Original array sorted-> [1 3 3 4 6 7 9]
- 排序(一)
(i) 从旧列表创建一个新列表并返回新列表,排序
(ii) 返回类型是一个列表
(iii) 创建原始数组的副本并进行排序时占用更多空间
(iv) 比 a.sort() 慢# Python code to create a sorted copy using # sorted() import numpy as np # Numpy array created a = np.array([9, 3, 1, 7, 4, 3, 6]) # unsorted array print print('Original array:\n', a) b = sorted(a) # sorted list returned to b, b type is #
print('New array sorted->', b) # original array no change print('Original array->', a) OUTPUT:a.sorted() Original array: [9 3 1 7 4 3 6] New array sorted-> [1, 3, 3, 4, 6, 7, 9] Original array-> [9 3 1 7 4 3 6]
- np.argsort(a)
(i) 返回对数组进行排序的索引
(ii) 返回类型为 numpy 数组
(iii) 占用空间作为新的排序索引数组返回# Python code to demonstrate working of np.argsort import numpy as np # Numpy array created a = np.array([9, 3, 1, 7, 4, 3, 6]) # unsorted array print print('Original array:\n', a) # Sort array indices b = np.argsort(a) print('Sorted indices of original array->', b) # To get sorted array using sorted indices # c is temp array created of same len as of b c = np.zeros(len(b), dtype = int) for i in range(0, len(b)): c[i]= a[b[i]] print('Sorted array->', c)
OUTPUT:np.argsort(a) Original array: [9 3 1 7 4 3 6] Sorted indices of original array-> [2 1 5 4 6 3 0] Sorted array-> [1 3 3 4 6 7 9]
- np.lexsort((b, a))
(i) 使用一系列键执行间接排序
(ii) 按 a 排序,然后按 b
(iii) 返回类型 ndarray of ints 沿指定轴对键进行排序的索引数组
(iv) 当一个新的排序索引数组成对返回时占用空间。# Python code to demonstrate working of # np.lexsort() import numpy as np # Numpy array created a = np.array([9, 3, 1, 3, 4, 3, 6]) # First column b = np.array([4, 6, 9, 2, 1, 8, 7]) # Second column print('column a, column b') for (i, j) in zip(a, b): print(i, ' ', j) ind = np.lexsort((b, a)) # Sort by a then by b print('Sorted indices->', ind)
OUTPUT:np.lexsort((b, a)) column a, column b 9 4 3 6 1 9 3 2 4 1 3 8 6 7 Sorted indices-> [2 3 1 5 4 6 0]