1. 问题
用 Numpy 求解矩阵特征对的时候,返回结果大小是随机的,而我们数据挖掘求解的时候常需要把特征值按从大到小的顺序排列。如何简单的实现对特征值和特征向量排序呢?
2. 分析
Numpy 的 argsort
函数,可以提取排序后的索引。举例来说
a = np.array([3, 1, 2, 4])
b = np.argsort(a)
其结果为
array([1, 2, 0, 3])
其对应关系为,b 中的元素就是 a 中元素从小到大后的索引。大意如下
a = [3, 1, 2, 4]
b = [1, 2, 0, 4]
smallest item index <---------+ + + +-----> Last smallest item index
| |
seconde smallest <------------+ +--------> Third smallest
item index item index
Small to big
+------------------------>
但这有一个问题,就是排列都是从小到大,Data Mining 里面很多时候都需要特征值从大到小排列。很遗憾 Numpy 并没有给我们提供选项,所以需要我们自己想办法。考虑到排列顺序乘以相反数以后正好颠倒,我们可以对待排序的 array 取相反数