排序:

numpy.lexsort():

numpy.lexsort()是个排字典序函数,因为很有意思,感觉也蛮有用的,所以单独列出来讲一下:

强调一点,本函数只接受一个参数

 import numpy as np

 a = np.array([1,2,3,4,5])
b = np.array([50,40,30,20,10]) c = np.lexsort((a,b))
print(list(zip(a[c],b[c])))
[(5, 10), (4, 20), (3, 30), (2, 40), (1, 50)]

这是一个间接排序函数,会优先使用后面列排序,后面一样才使用前面的列排序,测试如下:

 a = np.array([1,2,3,4,5])
b = np.array([40,40,30,20,10]) c = np.lexsort((a,b))
print(list(zip(a[c],b[c])))
[(5, 10), (4, 20), (3, 30), (1, 40), (2, 40)]

交换次序:

 a,b = b,a

 c = np.lexsort((a,b))
print(list(zip(a[c],b[c])))
[(40, 1), (40, 2), (30, 3), (20, 4), (10, 5)]

而且可以按照此规则进行多列排序(大于2个):

 a = np.array([1,2,3,4,5])
b = np.array([50,30,40,20,10])
d = np.array([400,300,300,100,200]) c = np.lexsort((a,b,d))
print(list(zip(a[c],b[c],d[c])))
[(4, 20, 100), (5, 10, 200), (2, 30, 300), (3, 40, 300), (1, 50, 400)]

numpy中的几种排序手段:

numpy.sort()           正常排序

numpy.msort()        正常排序,定死axis=0

Notes
-----
``np.msort(a)`` is equivalent to ``np.sort(a, axis=0)``.

array.sort()              原地排序,无return

numpy.argsort()       间接排序

numpy.lexsort()        间接排序,字典序

numpy.sort_complex()      复数排序,先实部后虚部

 np.random.seed(42)
complex_number = np.random.random(5) + np.random.random(5)*1j
print(complex_number)
print(np.sort_complex(complex_number)) # 复数排序,先实后虚
[ 0.37454012+0.15599452j  0.95071431+0.05808361j  0.73199394+0.86617615j
0.59865848+0.60111501j 0.15601864+0.70807258j]
[ 0.15601864+0.70807258j 0.37454012+0.15599452j 0.59865848+0.60111501j
0.73199394+0.86617615j 0.95071431+0.05808361j]

索引:

np.argmax(a)              最大值索引

np.nanargmin(b)         忽略nan的最小值索引

np.argwhere(a<=4)     符合条件的索引

 a = np.array([2,4,8])
print(np.argmax(a))
b = np.array([np.nan,2,4])
print(np.nanargmin(b))
c = np.array([2,4,8])
print(np.argwhere(a<=4))
2
1
[[0]
[1]]

np.searchsorted(a,[-2,7])

np.insert(a,indices,[-2,7])

 a = np.arange(5)
indices = np.searchsorted(a,[-2,7]) # 返回向有序数组中插入,不改变有序性的索引
print(indices)
print(np.insert(a,indices,[-2,7])) # 插入函数{目标数组,插入索引,插入数组}
[0 5]
[-2 0 1 2 3 4 7]

抽取:

np.extract(condition,a)

np.where(a%2==0)

np.nonzero(a)

 a = np.arange(7)
condition = (a%2)==0
print(a[a%2==0]) # 使用布尔索引
print(np.extract(condition,a)) # 使用np.extract()
print(np.where(a%2==0)) # 使用np.where()
print(np.nonzero(a)) # 提取非零元素
[0 2 4 6]
[0 2 4 6]
(array([0, 2, 4, 6]),)
(array([1, 2, 3, 4, 5, 6]),)

『Numpy学习指南』排序&索引&抽取函数介绍的更多相关文章

  1. 『Numpy学习指南』Matplotlib绘图

    数据生成: import numpy as np import matplotlib.pyplot as plt func = np.poly1d(np.array([,,,])) func1 = f ...

  2. NumPy学习指南(第2版)

    第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...

  3. 【NumPy学习指南】day4 多维数组的切片和索引

    ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1) 举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组 ...

  4. 【NumPy学习指南】day5 改变数组的维度

    我们已经学习了怎样使用reshape函数,现在来学习一下怎样将数组展平. (1) ravel 我们可以用ravel函数完成展平的操作: In: b Out: array([[[ 0, 1, 2, 3] ...

  5. NumPy 学习 第二篇:索引和切片

    数组索引是指使用中括号 [] 来定位数据元素,不仅可以定位到单个元素,也可以定位到多个元素.索引基于0,并接受从数组末尾开始索引的负索引. 举个例子,正向索引从0开始,从数组开始向末尾依次加1递增:负 ...

  6. vue学习指南:第一篇 - vue的介绍

    三大主流框架: 1. Vue.js 是目前最火的一个前端框架,react是最流行的前端框架 (react除了开发网站,还可以开发手机app,Vue语法也是可以用于手机App开发的,需要借助于wexx) ...

  7. 『嗨威说』常见的C++函数模板整理(一)

    开学两天,身上的职责直接变为两个班班长,三个小组组长,哇这事情估计够我忙活了,想躲都躲不掉啊,看来我还是真招人推荐各种管理职务啊,以后要是有人推荐我当经理啊领导啊该多好哈哈哈哈.记得今天奶奶生日,很开 ...

  8. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

  9. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

随机推荐

  1. python selenium第一个WebDriver脚本

    #coding=utf-8from selenium import webdriverimport timeimport osos.environ["webdriver.firefox.dr ...

  2. Linux基础命令---gzexe

    gzexe 压缩可执行文件,在执行程序的时候可以自动实现解压.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       g ...

  3. python基础五--dict

    一.昨日内容回顾 1. 列表: 增 insert:按照指定下标插入 append:在列表最后增加 extend:迭代式的增加到列表的最后,相当于列表扩展 删 pop:根据指定下标删除,返回删除的元素, ...

  4. SpringMVC Spring MyBatis 框架整合 Annotation MavenProject

    项目结构目录 pom.xml   jar包管理 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  5. 9大行为导致Java程序员薪资过低, 你有几个?

    Java程序员薪水有高有低,有的人一个月可能拿30K.50K,有的人可能只有2K.3K.同样有五年工作经验的Java程序员,可能一个人每月拿20K,一个拿5K.是什么因素导致了这种差异?本文整理导致J ...

  6. Rubin-Miller与Pollard Rho

    两个没什么卵用的算法. 只放一下模板: BZOJ3667 //BZOJ 3667 //by Cydiater //2017.2.20 #include <iostream> #includ ...

  7. 立几个flag

    有时候会心血来潮想学一点东西,然后搞别的东西的时候就慢慢忘了.. 这里做个备忘录: 树分块/树上莫队 广义后缀自动机(大概这辈子都不会去学了) 带花树(如果我能学的动那个线代的随机算法就放弃这个) 模 ...

  8. 20145122《 Java网络编程》实验五实验报告

    实验名称 Java网络编程 实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 结对小伙伴 20145120黄玄曦 博客地址:http://www.cnblo ...

  9. UVa 10891 Game of Sum - 动态规划

    因为数的总和一定,所以用一个人得分越高,那么另一个人的得分越低. 用$dp[i][j]$表示从$[i, j]$开始游戏,先手能够取得的最高分. 转移通过枚举取的数的个数$k$来转移.因为你希望先手得分 ...

  10. C++ tinyXML的使用和字符编码转换

    转载:http://jetyi.blog.51cto.com/1460128/761708/ 关于tinyxml使用的文档有很多(这篇文章就写的很好),这里仅提一下字符编码的转换问题,如果你不熟悉字符 ...