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获取到每个元素应该放置的位置。

  • 相关阅读:
    java基础笔记-类与对象(多态)
    oracle中trim,ltrim,rtrim函数用法
    git stash
    update from select
    oracle 查看主外键约束
    eclipse git 解决冲突
    根据Request获取客户端IP
    简单说说Spring Security 使用(附加验证码登录,自定义认证)
    linux的nohup命令的用法
    Python包管理工具介绍
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/10767907.html
Copyright © 2011-2022 走看看