一、索引
- 取值的顺序是从外围到最里面的元素位置,依次写入。
1.1、单值索引
import numpy as np a = np.arange(16).reshape(2,2,4) print("原数组: ",a) print("单值索引值: ",a[1][1][2]) >>> 原数组: [[[ 0 1 2 3] [ 4 5 6 7]] [[ 8 9 10 11] [12 13 14 15]]] 单值索引值: 14
1.2、花式索引
- 可以通过数组,数组中写明元素位置,来索引出多个需要的元素
import numpy as np a=np.arange(25).reshape(5,5)#定义一个5*5的二维数组 print("原数组: ",a) print("花式索引多值(外层取行值): ",a[[3, 3, 1, 4]])#注意这里一定传入的是数组格式 print("花式索引多值(二次取值,先行后列): ",a[[0,2,2,4],[0,2,4,4]])#注意这里一定传入的是数组格式 >>> 原数组: [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19] [20 21 22 23 24]] 花式索引多值(外层取行值): [[15 16 17 18 19] [15 16 17 18 19] [ 5 6 7 8 9] [20 21 22 23 24]] 花式索引多值(外层取行值): [ 0 12 14 24]
1.3、布尔索引
- 可以通过设置筛选条件生成布尔数组,在通过布尔数组反向索引出符合条件的结果
import numpy as np a=np.random.random((4,4))#生成4×4的二维数组 b=a>0.5#生成以a>0.5为筛选条件的布尔数组 print(b) print(a[b])#根据布尔数组将原值取出,变成一维数组 >>> [[ True True False False] [ True True True False] [ True True True True] [ True False True False]] [0.72159895 0.85017348 0.88332226 0.7494597 0.8514071 0.91133411 0.89253366 0.80979503 0.61827433 0.94660476 0.67418788]
1.4、索引器ix_()
- 与花式索引相比,ix_()可以以轴为单位进行遍历,而非花式索引中的单点遍历
import numpy as np a=np.arange(24).reshape(4,6)#生成4×4的二维数组 b=a[[1,3],[3,5]]#花式索引 c=a[np.ix_([1,3],[3,5])]#索引器 d=a[[1,3]][:,[3,5]] print("原数组: ",a) print("花式索引: ",b) print("索引器索引: ",c) print("c等值于d: ",d) >>> 原数组: [[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23]] 花式索引: [ 9 23] 索引器索引: [[ 9 11] [21 23]] c等值于d: [[ 9 11] [21 23]]
二、切片
- numpy切片方式与python默认方式一致
- 切片下来的内容与原数组共享同一片内存空间
import numpy as np a = np.arange(16).reshape(2,2,4) print("原数组: ",a) print("取一个值: ",a[1][1][2]) print("切片范围取值: ",a[1][1][2:4]) print("更大范围的切片遍历:: ",a[0][:][0:4]) >>> 原数组: [[[ 0 1 2 3] [ 4 5 6 7]] [[ 8 9 10 11] [12 13 14 15]]] 取一个值: 14 切片范围取值:
[14 15] 更大范围的切片遍历:
[[0 1 2 3] [4 5 6 7]]
三、元素修改
- 通过索引和切片得到的变量直接赋值即可修改