深入了解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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
Python面向对象之类和对象实例详解
Dec 10 Python
python里dict变成list实例方法
Jun 26 Python
Python 利用高德地图api实现经纬度与地址的批量转换
Aug 14 Python
Django 路由层URLconf的实现
Dec 30 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
浅谈keras使用中val_acc和acc值不同步的思考
Jun 18 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
Keras多线程机制与flask多线程冲突的解决方案
May 28 Python
如何理解及使用Python闭包
Jun 01 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多层数组与对象的转换实例代码
2013/08/05 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
Javascript将string类型转换int类型
2010/12/09 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
javascript操作css属性
2013/12/30 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
nodejs获取本机内网和外网ip地址的实现代码
2014/06/01 NodeJs
AngularJS指令详解及示例代码
2016/08/16 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python将多个excel表格合并为一个表格
2021/02/22 Python
对Python3中的input函数详解
2018/04/22 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
2020/04/14 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
日本PLST在线商店:日本时尚杂志刊载的人气服装
2016/12/10 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
计算机操作自荐信
2013/12/07 职场文书
数字化校园建设方案
2014/05/03 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
励志演讲稿大全
2014/08/21 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
防卫过当辩护词
2015/05/21 职场文书
退货证明模板
2015/06/23 职场文书