深入了解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中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
Python的UTC时间转换讲解
Feb 26 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
使用Python爬虫库requests发送表单数据和JSON数据
Jan 25 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
Python 实现进度条的六种方式
Jan 06 Python
Python数组变形的几种实现方法
May 30 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把数组值转换成键的方法
2015/07/13 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
token 机制和实现方式
2020/12/15 Javascript
Python 字符串操作方法大全
2014/03/11 Python
python机器学习实战之树回归详解
2017/12/20 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python__name__原理及用法详解
2019/11/02 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
傲盾软件面试题
2015/08/17 面试题
同事吵架检讨书
2014/02/05 职场文书
企业安全生产承诺书
2014/05/22 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2014年车间主任工作总结
2014/12/10 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
民事调解书范文
2015/05/20 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技