深入了解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使用PythonMagick将jpg图片转换成ico图片的方法
Mar 26 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python饼状图的绘制实例
Jan 15 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
Jul 28 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 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
Ajax PHP分页演示
2007/01/02 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
js转html实体的方法
2016/09/27 Javascript
javascript中this关键字详解
2016/12/12 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
Bootstrap实现的经典栅格布局效果实例【附demo源码】
2017/03/30 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
基于Node的React图片上传组件实现实例代码
2017/05/10 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
ES2020 新特性(种草)
2020/01/12 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
复制粘贴功能的Python程序
2008/04/04 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
承诺书怎么写
2014/03/26 职场文书
爱祖国演讲稿
2014/05/04 职场文书
公司捐书倡议书
2015/04/27 职场文书
2019销售早会主持词
2019/06/27 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
详解Redis基本命令与使用场景
2021/06/01 Redis
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
Go 中的空白标识符下划线
2022/03/25 Golang