深入了解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的web.py框架下的application.py模块
May 02 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
解决python3 安装不了PIL的问题
Aug 16 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
基于Python实现射击小游戏的制作
Apr 06 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中使用灵巧的体系结构
2006/10/09 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
Yii框架中jquery表单验证插件用法示例
2016/10/18 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
JavaScript 10件让人费解的事情
2010/02/15 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
解析javascript系统错误:-1072896658的解决办法
2013/07/08 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
JS抛物线动画实例制作
2018/02/24 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
python 用下标截取字符串的实例
2018/12/25 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
远程Wi-Fi宠物监控相机:Petcube
2017/04/26 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
个性大学生自我评价
2013/12/04 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
演讲稿格式范文
2014/05/19 职场文书
教师节倡议书
2014/08/30 职场文书
房屋维修申请报告
2015/05/18 职场文书
会计做账心得体会
2016/01/22 职场文书