深入了解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进阶教程之异常处理
Aug 30 Python
Python CSV模块使用实例
Apr 09 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
Python numpy 提取矩阵的某一行或某一列的实例
Apr 03 Python
python找出完数的方法
Nov 12 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
Python不支持 i ++ 语法的原因解析
Jul 22 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
如何正确理解python装饰器
Jun 15 Python
Python os和os.path模块详情
Apr 02 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中使用模板的方法
2008/05/24 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
php使用高斯算法实现图片的模糊处理功能示例
2016/11/11 PHP
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
使用Jquery实现点击文字后变成文本框且可修改
2013/09/21 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
常用的js方法合集
2017/03/10 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
Python深入06——python的内存管理详解
2016/12/07 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
会计岗位职责
2013/11/08 职场文书
就业自荐信
2013/12/04 职场文书
婚庆公司计划书
2014/09/15 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
政协工作总结2015
2015/05/20 职场文书
初中运动会前导词
2015/07/20 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
介绍一下28个JS常用数组方法
2022/05/06 Javascript