深入了解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 lambda和Python def区别分析
Nov 30 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
python绘制条形图方法代码详解
Dec 19 Python
python @property的用法及含义全面解析
Feb 01 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
PyQt5实现从主窗口打开子窗口的方法
Jun 19 Python
在python里面运用多继承方法详解
Jul 01 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
2017/10/31 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
2020/07/20 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
举例讲解Python中is和id的用法
2015/04/03 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python将excel转换为csv的代码方法总结
2019/07/03 Python
python单例模式的多种实现方法
2019/07/26 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
Sql面试题
2013/03/20 面试题
护理学毕业生求职信
2013/11/14 职场文书
计算机相关的自我评价
2014/01/15 职场文书
运动会广播稿30字
2014/01/21 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
公司考勤管理制度
2015/08/04 职场文书
2016年党员创先争优承诺书
2016/03/25 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS