numpy主要有两大类:narray和matrix(或简写mat),他们都有排序方法sort()和argsort()

这两个函数,默认都是按照纵轴切分数据,然后在各自切分的数据上进行从小到大排序。

sort()

会改变原有变量的数据存放,若是不想改变的话,可以使用copy(),即narray.copy()和matrix.copy(),复制一份新的数据到变量上。举例:

rawDataMat =mat([

[1, 2, 10],

[12, 5, 12],

[21, 3, 1],

[4, 8, 2],

[7, 10, 13],

[6, 9, 5]])print('rawDataMat\n{0}'.format(rawDataMat))

sortIndexData=rawDataMat.sort(0)print('sortData\n{0}'.format(rawDataMat))---------------------------------------------------------------------返回值:

rawDataMat

[[1 2 10]

[12 5 12]

[21 3 1]

[4 8 2]

[7 10 13]

[6 9 5]]

sortData

[[1 2 1]

[4 3 2]

[6 5 5]

[7 8 10]

[12 9 12]

[21 10 13]]

sort(0):在横轴上切分,对每个切分列进行从小到大排列;

若是sort():在纵轴上切分,对每个切分行(即每一个行)从小到大排列。

默认是行数据,从小到大排列

argsort()

不会改变原来变量的数据存放,而是获得原来变量的数据索引值,可以对array和matrix进行处理。

argsort(0):对每列取从小到大排列的对应索引值,

argsort():对每行取从小到大排列的对应索引值,

默认是行数据的从小到大排列的索引值,示例如下:

rawDataMat =mat([

[1, 2, 10],

[12, 5, 12],

[21, 3, 1],

[4, 8, 2],

[7, 10, 13],

[6, 9, 5]])print('rawDataMat\n{0}'.format(rawDataMat))#0-按横轴,切分

sortIndex0 =rawDataMat.argsort(0)print('sortIndex0\n{0}'.format(sortIndex0))#默认按列轴切分,在切分方向上从小到大排列,给出indices

sortIndex =rawDataMat.argsort()print('sortIndex\n{0}'.format(sortIndex))---------------------------------------------------------结果:

rawDataMat

[[1 2 10]

[12 5 12]

[21 3 1]

[4 8 2]

[7 10 13]

[6 9 5]]

sortIndex0

[[0 02]

[3 2 3]

[5 1 5]

[4 30]

[1 5 1]

[2 4 4]]

sortIndex

[[01 2]

[1 0 2]

[2 10]

[2 0 1]

[01 2]

[2 0 1]]

若原矩阵按索引值来获取排序值的话,则从小到大的数据以对角线上的值为起点,按左到右顺序取列数据。示例:

rawDataMat =mat([

[1, 2, 10],

[12, 5, 12],

[21, 3, 1],

[4, 8, 2],

[7, 10, 13],

[6, 9, 5]])print('rawDataMat\n{0}'.format(rawDataMat))#0-按横轴,切分

sortIndex0 =rawDataMat.argsort(0)print('sortIndex0\n{0}'.format(sortIndex0))

sortDataMat=rawDataMat[sortIndex0]print('sortDataMat\n{0}'.format(sortDataMat))-------------------------------------结果为:

rawDataMat

[[1 2 10]

[12 5 12]

[21 3 1]

[4 8 2]

[7 10 13]

[6 9 5]]

sortIndex0

[[0 02]

[3 2 3]

[5 1 5]

[4 30]

[1 5 1]

[2 4 4]]

sortDataMat

[[[1 2 10]

[1 2 10]

[21 3 1]]

[[4 8 2]

[21 3 1]

[4 8 2]]

[[6 9 5]

[12 5 12]

[6 9 5]]

[[7 10 13]

[4 8 2]

[1 2 10]]

[[12 5 12]

[6 9 5]

[12 5 12]]

[[21 3 1]

[7 10 13]

[7 10 13]]]

此时sortDataMat会增加维度,此处为(6,3,3)有没有什么好的方法,可以降维呢?方法如下:

sortColumnMat =sortDataMat[:, 0, 0]#sortColumnMat = sortDataMat[:, 1, 1]

#sortColumnMat = sortDataMat[:, 2, 2]

print('sortColumnMat\n{0}'.format(sortColumnMat))print(sortColumnMat.shape)------------------------------------结果:

sortColumnMat

[[1]

[4]

[6]

[7]

[12]

[21]]

(6, 1)

以上,可以得到排序的各个列,我们还可以优化代码,示例如下:

featCount = sortDataMat.shape[-1]for i inrange(featCount):

sortColumnMat=sortDataMat[:, i, i]print('sortColumnMat第{0}列,内容为:\n{1}'.format(i, sortColumnMat))---------------------------------------------结果:

sortColumnMat第0列,内容为:

[[1]

[4]

[6]

[7]

[12]

[21]]

sortColumnMat第1列,内容为:

[[2]

[3]

[5]

[8]

[9]

[10]]

sortColumnMat第2列,内容为:

[[1]

[2]

[5]

[10]

[12]

[13]]

到此,我们可以根据argsort(0),正常获得各个列的从小到大的排序数据。我们还可以利用flatten来减少矩阵的行,实现降维,然后将矩阵转化为数据,示例:

featCount = sortDataMat.shape[-1]for i inrange(featCount):

sortColumnMat=sortDataMat[:, i, i]#print('sortColumnMat第{0}列,内容为:\n{1}'.format(i, sortColumnMat))

sortDataList =sortColumnMat.flatten().A[0]print('sortDataList,第{0}列对应的数组数据为:{1},类型为:{2}'.format(i, sortDataList, type(sortDataList)))--------------------------------结果:

sortDataList,第0列对应的数组数据为:[ 1 4 6 7 12 21], 类型为:

sortDataList,第1列对应的数组数据为:[ 2 3 5 8 9 10], 类型为:

sortDataList,第2列对应的数组数据为:[ 1 2 5 10 12 13], 类型为:

利用flatten()降维到一行数据,然后利用A转化为数组,[0]表示取里面的第一个数据,该数据类型为numpy的数组ndarray

argsort 取前几_matrix根据argsort取值的内容分析相关推荐

  1. python取前三位_Python 实现取多维数组第n维的前几位

    Python 实现取多维数组第n维的前几位 现在我们有一个shape为(7352, 9, 128, 1)的numpy数组. 想要取出第2维的前三个数据,构成新数组(7352, 3, 128, 1) 我 ...

  2. oracle和sql server中,取前10条数据语法的区别

    在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...

  3. oracle 取前10条记录

    1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...

  4. mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园

    -- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...

  5. c语言字符串提取第二个字符,c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例...

    c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例.函数需引入的头文件:#include 定义strncpy()函数:char * strncpy(char *dest, const ...

  6. mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法

    1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样 ...

  7. Hive中分组取前N个值

    分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...

  8. 64马8赛道取前4问题

    64马8赛道问题 0. 问题描述 1. 解题思路 1.1 有计时的情况--8趟 1.2 无计时的情况 1.2.1 一般方法--15趟 1.2.2 优化方法--10至11趟 1.2.3 皮一下的方法-- ...

  9. matlab取中间的几位数,Excel中取前几位数、中间几位数、后几位数的方法

    在Excel中,我们可能会遇到取一组数据前几位数,中间几位数,或者后几位数的问题,这该怎么办呢?今天就教大家在Excel中用left.mid.right函数分别取出前几位数.中间几位数和后几位数的方法 ...

最新文章

  1. 无暇素数c语言百度,华为招聘--前人经验(转贴)
  2. Webservice入门教程_用Eclipse的TCP_IP工具监听请求实现端口转接
  3. 在keil中使用头文件实现多文件编程
  4. One order search dynamic SQL build logic
  5. Latex笔记(一)—— 复杂表格的制作
  6. python实现链表的删除_干货||链表的技巧和算法总结
  7. SqlServer根据表中ID加序号
  8. 【引用】关于close-on-exec标志
  9. Swift翻译之-关于Swift
  10. JLink引脚定义、JTAG引脚定义、SWD引脚定义
  11. 网卡添加VLAN TAG
  12. 易经——第一卦 乾 乾为天 乾上乾下
  13. 【UVA 1589 --- Xiangqi】
  14. 【串讲总结】涵盖ML/DL/NLP/推荐/风控/数学等知识点汇总列表
  15. 开一间蜜雪冰城能挣多少钱?
  16. 上海航芯 | 全自动咖啡机设计方案
  17. microsoft 365 E5申请过程收不到验证码的解决方案
  18. Java 中 字符串 1234 怎么转成 int?
  19. swing入门教程(一) swing简介
  20. bzoj1853 [Scoi2010]幸运数字

热门文章

  1. Altair Inspire Extrude Meta2021安装教程
  2. Unity 粒子特效、材质发光 HDR ShaderGraph图文教程
  3. JS怎样监控监控收集用户的行为数据
  4. 程序员本硕博学——一站式导航
  5. 爬取虎扑步行街论坛数据保存到MySQL、MongoDB
  6. 质量员考试建筑八大员考试消防建筑设施施工质量存在的问题
  7. 2022年最新安徽建筑八大员(土建)模拟真题题库及答案
  8. 解决django的sqlite3的database is locked
  9. opencv在vc10中的配置
  10. 基于Mathcad的LLC公式推导与化简(二)