深入了解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输出PowerPoint(ppt)文件中全部文字信息的方法
Apr 28 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
Python实现excel转sqlite的方法
Jul 17 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
python使用代理ip访问网站的实例
May 07 Python
python中for用来遍历range函数的方法
Jun 08 Python
Python多项式回归的实现方法
Mar 11 Python
python实现接口并发测试脚本
Jun 25 Python
简单了解django orm中介模型
Jul 30 Python
安装python及pycharm的教程图解
Oct 10 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 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模块memcache和memcached区别分析
2011/06/14 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
JS实现的省份级联实例代码
2013/06/24 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
viewer.js实现图片预览功能
2020/06/24 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
python关键字and和or用法实例
2015/05/28 Python
Python中实现三目运算的方法
2015/06/21 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
python中partial()基础用法说明
2018/12/30 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
python实现大学人员管理系统
2019/10/25 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
利用css3-animation实现逐帧动画效果
2016/03/10 HTML / CSS
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
初一科学教学反思
2014/01/27 职场文书
税务会计岗位职责
2014/02/18 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
公司催款律师函
2015/05/27 职场文书
庆七一主持词
2015/06/29 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python