索引排序内部原理

索引排序

最近看了关于索引排序的东西(排序信息能被其他数组使用),比较绕,在此总结一下。

背景:

比如你对矩阵进行特征分解,得到特征向量的数组和特征值的数组(他们是一一对应的),有时候你需要对特征值进行从大到小排序(PCA等),同时特征值也需要相应的排序。

牛刀小试:

1 #coding=utf-8
2 import numpy as np
3 li=[14,13,11,12,15]
4 li=np.array(li)
5 arg_sort=np.argsort(li)# arg_sort=  2 3 1 0 4
6 arg_sort_back=np.argsort(arg_sort) # arg_sort_back= 3 2 0 1 4
7 li_sort=li[arg_sort] #li_sort = 11 12 13 14 15
8 li_sort_back=li_sort[arg_sort_back] #li_sort_back =14 13 11 12 15

注:L8 排序结果又回去了,是不是很有意思

其中L5行的arg_sort就是排序的信息。

解释:

其他语言一般有sort函数,但一般是对源数据直接进行排序。如何实现上述这个功能

以d3.js为例:

等价写法:

1 var li=[14,13,11,12,15];
2 var arg_sort=d3.range(5).sort(function(a, b) { return d3.ascending(li[a], li[b]); });
3 
4 var li_sort=[]
5 for( var i in   arg_sort){
6     li_sort.push(li[arg_sort[i]])
7 }

这是遍历arg_sort(内部存放的是li排序后的位置【索引】)。如果遍历li的话,能通过arg_sort获取到每个元素应该放置的位置。

猜你喜欢

转载自www.cnblogs.com/xunhanliu/p/10767907.html