List排序
val_list = [1, 7, 3, 9, 5, 6]
val_list.sort() # sort()没有返回值,在原列表上排序
val_list.sort(reverse=True) # 逆序
print(val_list)
使用sort()方法对list排序会修改list本身,不会返回新list,通常此方法不如sorted()方便,但是如果你不需要保留原来的list,此方法将更有效sort()。
num_list = [1, 7, 3, 9, 5, 6]
num_list_ = sorted(num_list) # sorted, list作为参数,返回排序后的list
num_list_revs = sorted(num_list, reverse=True) # 逆序
print(num_list_)
print(num_list_revs)
numpy
1.sort
numpy.sort(a, axis=1, kind=‘quicksort’, order=None)
- a :所需排序的数组
- axis:数组排序时的基准,axis=0按行排列;axis=1按列排列
- kind:数组排序时使用的方法,其中:kind=′quicksort′为快排;kind=′mergesort′为混排;kind=′heapsort′为堆排;
- order:一个字符串或列表,可以设置按照某个属性进行排序
import numpy as np
nums = [3, 4, 2, 7, 1, 6]
nums = np.array(nums)
nums_sorted = np.sort(nums) # 从小到大排序
print(nums_sorted)
2.argsort
numpy.argsort(a, axis=1, kind=‘quicksort’, order=None)
- a :所需排序的数组
- axis:数组排序时的基准,axis=0按行排列;axis=1按列排列
- kind:数组排序时使用的方法,其中:kind=′quicksort′为快排;kind=′mergesort′为混排;kind=′heapsort′为堆排;
- order:一个字符串或列表,可以设置按照某个属性进行排序
import numpy as np
nums = [3, 4, 2, 7, 1, 6]
nums = np.array(nums)
nums_sorted = np.sort(nums)
print(nums_sorted)
arg_sorted = np.argsort(nums)
print(arg_sorted)
numpy.argsort() 返回按值递增排序后的索引列表
argsort()的应用
矩阵特征分解后得到,特征值和特征向量,但是,我们不一定需要所有的特征,故可以选取特征值最大的几个特征和这些特征对应的特征向量。这样,我们只需要利用argsort()求出最大特征值的索引,有了索引就可以直接提取最大特征值和对应的最大特征向量。
def eig_top_k(mat, k):
eig_vals, eig_vecs = np.linalg.eig(mat)
print(eig_vals)
print(eig_vecs)
sorted_indices = np.argsort(eig_vals) # 值从小到大排序,返回排序的索引
return eig_vals[sorted_indices[:-k-1:-1]], eig_vecs[:,sorted_indices[:-k-1:-1]] # 复制最后一个到倒数第k个元素
nums = np.array([[1, 7, 9], [3, 6, 7], [4, 3, 5]])
eig_vals, eig_vecs = eig_top_k(nums, 2)
print(eig_vals)
print(eig_vecs)