深入了解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获得图片base64编码示例
Jan 16 Python
简单理解Python中的装饰器
Jul 31 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
Python日志模块logging基本用法分析
Aug 23 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
python编写猜数字小游戏
Oct 06 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
Python集合的基础操作
Nov 01 Python
python中Pyqt5使用Qlabel标签播放视频
Apr 22 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/13 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
Thinkjs3新手入门之添加一个新的页面
2017/12/06 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
vue中的数据绑定原理的实现
2018/07/02 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
python分割文件的常用方法
2014/11/01 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
pandas重新生成索引的方法
2018/11/06 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
365 Tickets英国:全球景点门票
2019/07/06 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
竞选班干部演讲稿300字
2014/08/20 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
处级干部考察材料
2014/12/24 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书