打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
numpy中的索引技巧详解
numpy中数组的索引非常灵活且强大,基本的操作技巧有以下几种

1. 下标索引

通过每一轴的下标来访问元素,一次获取一个元素,用法如下

>>> import numpy>>> a = numpy.arange(6)>>> aarray([0, 1, 2, 3, 4, 5])# 一维数组用法和python的列表对象一致# 支持从0开始的正整数下标# 也支持从-1开始的负整数下标>>> a[2]2>>> a[-2]4# 二维数组,提供两个下标>>> a = numpy.arange(9).reshape(3, -1)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 支持两种写法# 两个中括号,第一个为行的下标,第二个为列的下标# 一个中括号,两个下标用逗号分隔
>>> a[0][1]1>>> a[0, 1]1>>> a[0][-1]2>>> a[0, -1]2

两个中括号的写法本质是分成了两步,第一步先根据第一个中括号中的下标提取对应的行,返回值为一个一维数组,第二步对第一步提取出的一维数组进行访问,因为产生了临时数组,效率会低一些。

2. 切片索引

切片索引通过切片的方式来提取子集,适用于数组内连续元素的提取,用法如下

>>> a = numpy.arange(6)>>> aarray([0, 1, 2, 3, 4, 5])# 一维数组用法和python的列表对象一致>>> a[1:5]array([1, 2, 3, 4])>>> a[1:5:2]array([1, 3])>>> a[::2]array([0, 2, 4])# 整个数组>>> a[::-1]array([5, 4, 3, 2, 1, 0])# 二维数组>>> a = numpy.arange(9).reshape(3, -1)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])>>> a[1:3,1:2]array([[4], [7]])# 一个冒号的简写表示提取全部的下标# 一个省略号的简写表示提取全部的下标# 提取第二行>>> a[1, :]array([3, 4, 5])>>> a[1, ...]array([3, 4, 5])# 提取第二列>>> a[:, 1]array([1, 4, 7])

二维数组的切片不能用两个中括号的写法,因为切片的返回值和原始数组维度相同,第一步切片提取出来之后任然是二维数组

>>> a = numpy.arange(9).reshape(3, -1)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])>>> a[1:3]array([[3, 4, 5], [6, 7, 8]])

3. 花式索引

花式索引,本质是根据下标的集合,即索引数组来提取子集,与切片的区别在于,花式索引可以提取非连续的元素,用法如下

>>> a = numpy.arange(6)>>> aarray([0, 1, 2, 3, 4, 5])>>> a[[1, 2, 5]]array([1, 2, 5])# 返回值总是和索引数组的维度相同>>> a[numpy.array([(0, 1, 3),(1, 4, 5)])]array([[0, 1, 3], [1, 4, 5]])>>> a = numpy.arange(9).reshape(3, -1)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 根据索引数组中的下标提取对应的行>>> a[[1, 0]]array([[3, 4, 5], [0, 1, 2]])# 一轴为索引数组,另一轴为下标索引>>> a[[0,2],1]array([1, 7])# 两个轴同时为索引数组,需要使用ix_函数# 第一个数组中的元素为行对应的下标# 第一个数组中的元素为列对应的下标>>> a[numpy.ix_([0,1], [0,1])]array([[0, 1], [3, 4]])

需要注意,利用花式索引从二维数组中提取当行或者单列的数据,会统一返回一维数组,这和切片不同,因为切片只是在原来的数组上生成新视图,而花式索引总是生成一个新的数组。

4. 布尔索引

布尔索引本质是根据一个布尔数组来提取子集,用法如下

>>> a = numpy.arange(6)>>> aarray([0, 1, 2, 3, 4, 5])# 一维数组>>> a > 3array([False, False, False, False, True, True], dtype=bool)>>> a[a > 3]array([4, 5])>>> a = numpy.arange(9).reshape(3, -1)>>> aarray([[0, 1, 2], [3, 4, 5], [6, 7, 8]])# 二维数组>>> a > 3array([[False, False, False], [False, True, True], [ True, True, True]], dtype=bool)>>> a[a > 3]array([4, 5, 6, 7, 8])

布尔索引的返回值也是一个新的数组,所以也要注意返回值的维度问题。

·end·

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
NumPy基础教程(三)高级属性
机器学习:爱因斯坦的小贡献
入门numpy(25﹪-50﹪)【解读numpy官方文档】
NumPy的详细教程
Python数据分析之numpy学习(一)
Python 数据分析基础包:Numpy
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服