深入了解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 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
Python yield 使用方法浅析
May 20 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
Python+threading模块对单个接口进行并发测试
Jun 25 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python计算波峰波谷值的方法(极值点)
Feb 18 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
Python定时任务框架APScheduler原理及常用代码
Oct 05 Python
pytorch 把图片数据转化成tensor的操作
Mar 04 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 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调用三种数据库的方法(3)
2006/10/09 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python实现感知机(PLA)算法
2017/12/20 Python
详解Python3的TFTP文件传输
2018/06/26 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
AJax面试题
2014/11/25 面试题
2014元旦晚会策划方案
2014/02/19 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
产品质量保证书范本
2015/02/27 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
校园广播站开场白
2015/06/01 职场文书
活动新闻稿范文
2015/07/17 职场文书
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android