深入了解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中super()函数简介及用法分享
Jul 11 Python
Python 多线程实例详解
Mar 25 Python
Mac 上切换Python多版本
Jun 17 Python
Python实现的计算马氏距离算法示例
Apr 03 Python
pytorch训练imagenet分类的方法
Jul 27 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
python中的函数递归和迭代原理解析
Nov 14 Python
python 安装impala包步骤
Mar 28 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 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
短波的认识
2021/03/01 无线电
php二分法在IP地址查询中的应用
2008/08/12 PHP
php 禁止页面缓存输出
2009/01/07 PHP
php实现的Captcha验证码类实例
2014/09/22 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
window.onload与$(document).ready()的区别分析
2015/05/30 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python中in在list和dict中查找效率的对比分析
2018/05/04 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
Java servlet面试题
2012/03/04 面试题
大型营销活动计划书
2014/04/28 职场文书
详解CSS故障艺术
2021/05/25 HTML / CSS