深入了解NumPy 高级索引


Posted in Python onJuly 24, 2020

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

整数数组索引

以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。

import numpy as np 
 
x = np.array([[1, 2], [3, 4], [5, 6]]) 
y = x[[0,1,2], [0,1,0]] 
print (y)

输出结果为:

[1  4  5]

以下实例获取了 4X3 数组中的四个角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。

import numpy as np 
 
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) 
print ('我们的数组是:' )
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols] 
print ('这个数组的四个角元素是:')
print (y)

输出结果为:

我们的数组是:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

这个数组的四个角元素是:
[[ 0  2]
 [ 9 11]]

返回的结果是包含每个角元素的 ndarray 对象。

可以借助切片 : 或 … 与索引数组组合。如下面例子:

import numpy as np
 
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)

输出结果为:

[[5 6]
 [8 9]]
[[5 6]
 [8 9]]
[[2 3]
 [5 6]
 [8 9]]

布尔索引

我们可以通过一个布尔数组来索引目标数组。

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

以下实例获取大于 5 的元素:

import numpy as np 
 
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) 
print ('我们的数组是:')
print (x)
print ('\n')
# 现在我们会打印出大于 5 的元素 
print ('大于 5 的元素是:')
print (x[x > 5])

输出结果为:

我们的数组是:
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

大于 5 的元素是:
[ 6  7  8  9 10 11]

以下实例使用了 ~(取补运算符)来过滤 NaN。

import numpy as np 
 
a = np.array([np.nan, 1,2,np.nan,3,4,5]) 
print (a[~np.isnan(a)])

输出结果为:

[ 1.   2.   3.   4.   5.]

以下实例演示如何从数组中过滤掉非复数元素。

import numpy as np 
 
a = np.array([1, 2+6j, 5, 3.5+5j]) 
print (a[np.iscomplex(a)])

输出如下:

[2.0+6.j  3.5+5.j]

花式索引

花式索引指的是利用整数数组进行索引。

花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。

花式索引跟切片不一样,它总是将数据复制到新数组中。

1、传入顺序索引数组

import numpy as np 
 
x=np.arange(32).reshape((8,4))
print (x[[4,2,1,7]])

输出结果为:

[[16 17 18 19]
 [ 8  9 10 11]
 [ 4  5  6  7]
 [28 29 30 31]]

2、传入倒序索引数组

import numpy as np 
 
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]])

输出结果为:

[[16 17 18 19]
 [24 25 26 27]
 [28 29 30 31]
 [ 4  5  6  7]]

3、传入多个索引数组(要使用np.ix_)

import numpy as np 
 
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])

输出结果为:

[[ 4  7  5  6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11  9 10]]

以上就是深入了解NumPy 高级索引的详细内容,更多关于NumPy 高级索引的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python发送伪造的arp请求
Jan 09 Python
Python深入学习之上下文管理器
Aug 31 Python
python各种语言间时间的转化实现代码
Mar 23 Python
使用python绘制常用的图表
Aug 27 Python
python类的继承实例详解
Mar 30 Python
python表格存取的方法
Mar 07 Python
Python基于辗转相除法求解最大公约数的方法示例
Apr 04 Python
详解python之heapq模块及排序操作
Apr 04 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
python利用tkinter实现屏保
Jul 30 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
python实现学生管理系统开发
Jul 24 #Python
浅析Python 多行匹配模式
Jul 24 #Python
Python图像处理二值化方法实例汇总
Jul 24 #Python
Python如何合并多个字典或映射
Jul 24 #Python
Matplotlib 绘制饼图解决文字重叠的方法
Jul 24 #Python
Python3.7安装pyaudio教程解析
Jul 24 #Python
python调用私有属性的方法总结
Jul 24 #Python
You might like
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php通过exif_read_data函数获取图片的exif信息
2015/05/21 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
javascript的函数作用域
2014/11/12 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
为python设置socket代理的方法
2015/01/14 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Python实现单词翻译功能
2017/06/06 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
基于python生成器封装的协程类
2019/03/20 Python
pycharm修改file type方式
2019/11/19 Python
Python tcp传输代码实例解析
2020/03/18 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
廉政教育心得体会
2014/01/01 职场文书
社区工作者思想汇报
2014/01/13 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
授权委托书范本
2014/04/03 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
杨善洲电影观后感
2015/06/04 职场文书
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server