argsort 取前几_matrix根据argsort取值的内容分析
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取值的内容分析相关推荐
- python取前三位_Python 实现取多维数组第n维的前几位
Python 实现取多维数组第n维的前几位 现在我们有一个shape为(7352, 9, 128, 1)的numpy数组. 想要取出第2维的前三个数据,构成新数组(7352, 3, 128, 1) 我 ...
- oracle和sql server中,取前10条数据语法的区别
在sql server中,取数据中前10条语句,我们可以用top 10 这样语句,但是oracle就没有这个函数,接下来介绍它们之间的区别 1.sql server 取前10语句和随机10条的语法 - ...
- oracle 取前10条记录
1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...
- mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园
-- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...
- c语言字符串提取第二个字符,c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例...
c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例.函数需引入的头文件:#include 定义strncpy()函数:char * strncpy(char *dest, const ...
- mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法
1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样 ...
- Hive中分组取前N个值
分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...
- 64马8赛道取前4问题
64马8赛道问题 0. 问题描述 1. 解题思路 1.1 有计时的情况--8趟 1.2 无计时的情况 1.2.1 一般方法--15趟 1.2.2 优化方法--10至11趟 1.2.3 皮一下的方法-- ...
- matlab取中间的几位数,Excel中取前几位数、中间几位数、后几位数的方法
在Excel中,我们可能会遇到取一组数据前几位数,中间几位数,或者后几位数的问题,这该怎么办呢?今天就教大家在Excel中用left.mid.right函数分别取出前几位数.中间几位数和后几位数的方法 ...
最新文章
- 无暇素数c语言百度,华为招聘--前人经验(转贴)
- Webservice入门教程_用Eclipse的TCP_IP工具监听请求实现端口转接
- 在keil中使用头文件实现多文件编程
- One order search dynamic SQL build logic
- Latex笔记(一)—— 复杂表格的制作
- python实现链表的删除_干货||链表的技巧和算法总结
- SqlServer根据表中ID加序号
- 【引用】关于close-on-exec标志
- Swift翻译之-关于Swift
- JLink引脚定义、JTAG引脚定义、SWD引脚定义
- 网卡添加VLAN TAG
- 易经——第一卦 乾 乾为天 乾上乾下
- 【UVA 1589 --- Xiangqi】
- 【串讲总结】涵盖ML/DL/NLP/推荐/风控/数学等知识点汇总列表
- 开一间蜜雪冰城能挣多少钱?
- 上海航芯 | 全自动咖啡机设计方案
- microsoft 365 E5申请过程收不到验证码的解决方案
- Java 中 字符串 1234 怎么转成 int?
- swing入门教程(一) swing简介
- bzoj1853 [Scoi2010]幸运数字