NumPy 除了之前文章中介绍的用整数和切片的索引外,数组还可以由整数数组索引、布尔索引及花式索引。
整数数组索引
整数索引有助于基于 N 维索引来获取数组中任意元素。每个整数数组表示该维度的下标值。当索引的元素个数就是目标 ndarray 的维度时,会变得相当直接。以下示例获取了 ndarray 对象中每一行指定列的一个元素。因此,行索引包含所有行号,列索引指定要选择的元素。
以下实例获取数组中 (0, 0) 、(1, 1) 、(2, 2)位置处的元素。
也可以利用数字索引生成同样维度的数组,如下获取数组中 (0, 0) 、(0, 2) 、(2, 0)、(2, 2)位置处的元素。
布尔索引
我们可以通过一个布尔数组来索引目标数组,以此找出与布尔数组中值为True的对应的目标数组中的数据。需要注意的是,布尔数组的长度必须与目标数组对应的轴的长度一致。
如下,查看数组中大于5的元素。
如下,将数组中大于5的元素索引出来。
此外,通过布尔型数组设置值是一种常用的方式,如下,将数组大于5的值设置为5。
需要注意,Python的关键字and和or在布尔型数组中无效。
花式索引
花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。
花式索引它总是将数据复制到新数组中,如下。
对于使用两个整型数组作为索引的时候,那么结果是按照顺序取出对应轴的对应下标的值。需要注意,这两个整型数组的shape应该一致,或者其中一个数组应该是长度为1的一维数组。例如,以[2, 1],[0, 2]这两个整型数组作为索引,那么对于二维数组,则取出(2, 0)、(1, 2)这些坐标对应的元素。
如果要得到矩形区域的话,利用np.ix_函数,它可以将两个一维的整数数组转化为方形区域的索引器,如下。