深入了解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中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python基于DES算法加密解密实例
Jun 03 Python
Python中实现三目运算的方法
Jun 21 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
Python开发网站目录扫描器的实现
Feb 21 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
用python实现学生管理系统
Jul 24 Python
解决c++调用python中文乱码问题
Jul 29 Python
安装不同版本的tensorflow与models方法实现
Feb 20 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 Python
Python中super().__init__()测试以及理解
Dec 06 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中显示格式化的用户输入
2006/10/09 PHP
基于mysql的论坛(3)
2006/10/09 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
python对一个数向上取整的实例方法
2020/06/18 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
Kiwi.com中国:找到特价机票并发现新目的地
2019/10/27 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
中专生自我鉴定
2013/12/17 职场文书
党员大会主持词
2014/04/02 职场文书
小学生新年寄语
2014/04/03 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
企业介绍信范文
2015/01/30 职场文书
出国留学英文自荐信
2015/03/25 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
QT与javascript交互数据的实现
2021/05/26 Javascript
JavaScript设计模式之原型模式详情
2022/06/21 Javascript