深入了解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正则表达式操作指南(re使用)
Sep 06 Python
Python中几种操作字符串的方法的介绍
Apr 09 Python
Python实现建立SSH连接的方法
Jun 03 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
pyshp创建shp点文件的方法
Dec 31 Python
python实现批量nii文件转换为png图像
Jul 18 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
python 实现兔子生兔子示例
Nov 21 Python
centos7中安装python3.6.4的教程
Dec 11 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
php在数据库抽象层简单使用PDO的方法
2015/11/03 PHP
php获取ip及网址的简单方法(必看)
2017/04/01 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python微信撤回监测代码
2019/04/29 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python能做哪些生活有趣的事情
2020/09/09 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
交通专业个人自荐信格式
2013/09/23 职场文书
医学生自我鉴定范文
2013/11/08 职场文书
园林设计师自荐信
2013/11/18 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
移交协议书
2014/08/19 职场文书
会计师事务所实习证明
2014/11/16 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
pytorch 如何使用float64训练
2021/05/24 Python