除了整数索引之外,NumPy中还提供了两个形式比较复杂的索引——花式索引和布尔索引,下面对这两种索引的基本用法进行详细的讲解。
1.花式索引
花式索引指以整数组成的数组或列表为索引。当使用花式索引访问一维数组时,程序会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的元素,并将这些元素以数组的形式返回;当使用花式索引访问二维数组时,程序会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的一行元素,并将这些行元素以数组的形式返回。接下来,创建一个一维数组,使用花式索引获取该数组的多个元素,代码如下。
In []: import numpy as np array_ld = np.arange (1, 10) print (array_1d) print("- 访问索引为[2,5,8]的元素 print (array_1d[[2, 5, 8]]) [1 2 3 45 6 7 8 9] ____________ [36 9]
以上代码首先创建了一个一维数组array_ld,然后使用花式索引[2.5.8]访问了该一维数组,即依次获取索引2、5、8对应的元素3、6、9.并返回包含这几个元素的数组。由输出结果可知,程序输出了一个包含3、6、9这3个元素的数组,说明使用花式索引成功地一次访问了数组中的多个元素。
接下来,创建一个二维数组,使用花式索引获取该数组的多行元素,代码如下。
In []: array_2d - np.arange (1, 10).reshape((3, 3)) print (array_2d) print("_______________") # 访问索引为[0,2]的元素 print(array_2d[[0, 2]]) [[1 2 3] [4 5 6] [7 8 9]] [[1 2 3] [7 8 9]]
需要说明的是,在使用两个花式索引,即通过“二维数组[花式索引,花式索引]”的形式访问数组时,会将第一个花式索引对应数组或列表的各元素作为行索引,将第二个花式索引对应数组或列表的各元素作为列索引,再按照“二维数组[行索引,列索引]”的形式获取对应位置的元素。例如,使用两个花式索引访问二维数组array_2d的元素,代码如下。
In 1]: #使用两个花式索引访问元素 print (array_2d[[0, 2], [1, 1]]) [2 8]
上述与二维数组相关的花式索引操作的示意图如下图所示。
花式索引操作示意图
2.布尔索引
布尔索引是以布尔值构成的数组为索引。当使用布尔索引访问一个目标数组时,程序会将布尔数组中的每个布尔值作为索引,只要布尔值为True,就从目标数组中获取与True位置对应的元素。需要说明的是,布尔数组的形状必须与目标数组的形状相同。接下来,创建一个二维数组,获取该数组中值大于5的元素,代码如下。
In []: array_2d = np.arange (1, 10).reshape ((3, 3)) print(array_2d) print("-_______--") 使用布尔索引访问元素 print (array_2d > 5) print("----------") print (array_2d[array_2d > 5]) [{1 2 3] [4 5 6] [7 8 9]} ---------- [[False False Falce] [False False Truf [ True True True]} ---------- [6 7 8 9]
以上代码中,首先创建了一个形状为(3,3)的二维数组array_2d,该数组中的元素为1~9;然后将array_2d数组进行布尔运算,判断array_2d中的每个元素是否都大于5.大于5会得到布尔值 Tnue,小于5会得到布尔值False,所有的布尔值构成一个形状与array_2d数组相同的布尔数组;最后将这个布尔数组作为布尔索引,通过布尔索引获取array_2d数组中的元素。从输出的结果可以看出,程序返回了array_2d数组中与布尔数组中Tnue位置对应的元素。
上述二维数组相关的布尔索引操作的示意图如图2-4所示。
布尔索引示意图
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/277239.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除