NumPy高级索引
高级索引返回的是数组的副本(深拷贝),而切片操作返回的是数组视图(浅拷贝)。如果您对副本和视图的概念陌生,可直接跳转学习《NumPy副本和视图》一节。
1. 整数数组索引
整数数组索引,它可以选择数组中的任意一个元素,比如,选择第几行第几列的某个元素,示例如下:
输出结果是:import numpy as np
#创建二维数组
x = np.array([[1, 2], [3, 4], [5, 6]])
#[0,1,2]代表行索引;[0,1,0]代表列索引
y = x[[0,1,2],[0,1,0]]
print (y)
[1 4 5]
对上述示例做简单分析:将行、列索引组会得到 (0,0)、(1,1) 和 (2,0) ,它们分别对应着输出结果在原数组中的索引位置。下面再看一组示例:获取了 4*3 数组中的四个角上元素,它们对应的行索引是 [0,0] 和 [3,3],列索引是 [0,2] 和 [0,2]。
import numpy as np
b = np.array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9,10,11]])
r = np.array([[0,0],[3,3]])
c = np.array([[0,2],[0,2]])
#获取四个角的元素
c = b[r,c]
print(c)
输出结果:
您也可以将切片所使用的[[ 0 2]
[ 9 11]]
:或省略号...与整数数组索引结使用,示例如下:import numpy as np
d = np.array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
#对行列分别进行切片
e = d[1:4,1:3]
print(e)
#行使用基础索引,对列使用高级索引
f = d[1:4,[1,2]]
#显示切片后结果
print (f)
#对行使用省略号
h=d[...,1:]
print(h)
输出结果:
#e数组
[[ 4 5]
[ 7 8]
[10 11]]
#f数组
[[ 4 5]
[ 7 8]
[10 11]]
#h数组
[[ 1, 2],
[ 4, 5],
[ 7, 8],
[10, 11]]
2. 布尔数组索引
当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引。下面示例返回数组中大于 6 的的所有元素:输出结果:#返回所有大于6的数字组成的数组
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print (x[x > 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]
3. 花式索引(拓展知识)
花式索引也可以理解为整数数组索引,但是它们之间又略有不同,下面通过示例做简单讲解。(本内容作为拓展知识了解即可)花式索引也会生成一个新的副本。
当原数组是一维数组时,使用一维整型数组作为索引,那么索引结果就是相应索引位置上的元素。
>>> import numpy as np
>>> x=np.array([1,2,3,4])
>>> print(x[0])
1
如果原数组是二维数组,那么索引数组也需要是二维的,索引数组的元素值与被索引数组的每一行相对应,示例如下:
import numpy as np
x=np.arange(32).reshape((8,4))
#分别对应 第4行数据、第2行数据、第1行数据、第7行数据项
print (x[[4,2,1,7]])
输出结果:
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]
也可以使用倒序索引数组,示例如下:
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]]
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]]
其中 [1,5,7,2] 代表行索引,而 [0,3,1,2] 表示与行索引相对应的列索引值,也就是行中的元素值会按照列索引值排序。比如,行元素,未排序前的顺序是 [4,5,6,7],经过列索引排序后变成了 [4,7,5,6]。
- 随机文章
- 马尔代夫罗庄夫(马尔代夫前总统罗庄夫被判入狱15年)
- 南亚马尔代夫山脉(探索南亚马尔代夫壮美山脉的神秘之美)
- 台湾马尔代夫酒店(台湾推出类似马尔代夫的水上别墅酒店)
- 去马尔代夫带什么(马尔代夫必备装备指南,出行前必看!)
- 小伙马尔代夫回国(年轻人从马尔代夫回国,写下深刻感悟)
- 外国旅游马尔代夫(马尔代夫:畅游印度洋的美丽度假胜地)
- 产自马尔代夫香水(马尔代夫出产香水,欣赏大海清香气息)
- 中国 马尔代夫 几点(中马友好新里程碑:中国援建马公主医院落成!)
- 播放马尔代夫战警(后:探秘马尔代夫特警队精锐队员风采)
- 揭西马尔代夫旅游(揭西马尔代夫:一个梦幻般的旅游胜地)
- 印尼 马尔代夫(印尼和马尔代夫:南洋度假胜地)
- 陶桃 马尔代夫(陶桃宣布在梦幻马尔代夫度假)
- 武汉前往马尔代夫(武汉可直飞马尔代夫,来场五星级假期)
- 情侣 马尔代夫(情侣浪漫度假,马尔代夫等你来体验)
- 爱在马尔代夫阅读(浪漫之旅,记录爱在蓝天碧海马尔代夫)
- 泸州马尔代夫海滩(泸州现代马尔代夫风情海岛等您来探索)
- 渭南马尔代夫现状(渭南市公众关注渭南马尔代夫申遗现状)
- 青岛马尔代夫足浴(青岛足浴店推出“马尔代夫风情”服务)
- 莆田马尔代夫现状(揭秘莆田医院在马尔代夫的操作现状!)
- 辽宁营口马尔代夫(辽宁营口公民在马尔代夫遭遇袭击事件)
- 马尔代夫位置定位(马尔代夫地图:定位、位置、景点介绍)
- 沙雕小说马尔代夫(马尔代夫之旅:一个不怎么正常的小说)
- 马尔代夫关于我们(马尔代夫官方网站:了解我们的目的地)
- 长春南湖马尔代夫(长春南湖打造仿佛马尔代夫的旅游胜地)
- 马尔代夫军人视频(马尔代夫士兵拍摄的视频引发网友热议)
- 珍珠 马尔代夫(重返海岛世界,尽享珍珠般的马尔代夫之旅)
- 马尔代夫回程抗原(马尔代夫出发需做抗原检测,回程亦然)
- 亚雷 马尔代夫(马尔代夫安达卢西亚度假村被评为全球最好的酒店之一)
- 关岛 马尔代夫(后的:岛国旅游胜地:关岛和马尔代夫)
- 马尔代夫出兵视频(马尔代夫发布出兵视频,展示军事实力)
