zoukankan      html  css  js  c++  java
  • 索引排序内部原理

    索引排序

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

    背景:

    比如你对矩阵进行特征分解,得到特征向量的数组和特征值的数组(他们是一一对应的),有时候你需要对特征值进行从大到小排序(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获取到每个元素应该放置的位置。

  • 相关阅读:
    解决sqlite3 dos下显示中文乱码
    毕业两年
    成就感
    重构html的下拉框select
    ie6 select不兼容处理(转)
    全选删除确认改进
    GridView移动行变色
    gridview固定列的宽度并且能换行
    分页控件结合分页存储过程
    网页滚动条向下拉动奇慢的原因
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/10767907.html
Copyright © 2011-2022 走看看