NumPy中的高级索引指的是使用整数数组或布尔数组来索引数组的方式,相较于基本索引(使用切片或整数索引),高级索引提供了更加灵活的方式来获取数组中的元素。下面我们来详细介绍一下NumPy中的高级索引。
整数数组索引
整数数组索引是指使用整数数组来作为索引的方式。例如,有一个二维数组a:
import numpy as np
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
可以使用整数数组来获取其中的元素:
rows = np.array([0, 1, 2])
cols = np.array([0, 1, 2])
print(a[rows, cols]) # [0 4 8]
上面的例子中,rows和cols分别代表了要获取的行和列的索引,通过a[rows, cols]就可以获取到对应的元素。
此外,还可以使用整数数组来获取数组中的部分元素:
print(a[rows, 1:]) # [[1 2] [4 5] [7 8]]
这个例子中,1:代表获取从第二列到最后一列的元素。
布尔索引
布尔索引是使用布尔值数组来索引数组的一种方式。布尔值数组中的每个元素表示是否选择对应的索引位置。例如,我们可以创建一个布尔值数组,然后使用它来选择所有正数或负数:
import numpy as np
arr = np.array([-1, 2, -3, 4, -5])
positive_mask = arr > 0
positive_numbers = arr[positive_mask]
print(positive_numbers) # [2, 4]
在这个例子中,我们首先使用比较运算符 > 来创建一个布尔值数组 positive_mask,然后将其传递给数组 arr 来选择所有正数。
除了使用比较运算符,还可以使用布尔运算符(如 &、| 和 ~)以及其他逻辑运算符来创建复杂的布尔值数组。
import numpy as np
arr = np.array([-1, 2, -3, 4, -5])
mask = (arr > 0) & (arr % 2 == 0)
result = arr[mask]
print(result) # [2, 4]
在这个例子中,我们使用逻辑运算符 & 来创建一个由两个条件组成的布尔值数组,以选择所有正偶数。
布尔索引还可以用于更复杂的操作,例如按条件更新数组中的值:
import numpy as np
arr = np.array([-1, 2, -3, 4, -5])
mask = arr < 0
arr[mask] = 0
print(arr) # [0, 2, 0, 4, 0]
在这个例子中,我们首先创建一个布尔值数组 mask,它表示所有负数的位置。然后,我们使用布尔索引来将所有负数替换为零。
布尔索引还可以用于选择多个维度中的元素。例如,我们可以创建一个二维数组,并使用布尔值数组来选择其中的一些行和列:
import numpy as np
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
rows_mask = [True, False, True]
cols_mask = [False, True, False]
result = arr[rows_mask, :][:, cols_mask]
print(result) # [[1], [7]]
在这个例子中,我们创建了两个布尔值数组 rows_mask 和 cols_mask,它们分别用于选择行和列。然后,我们使用这两个布尔值数组来选择二维数组中的子数组。
花式索引
花式索引是使用整数数组来选择数组中的元素。它有两种形式:整数数组和布尔数组。整数数组花式索引是指在要获取的每个维度上都使用一个整数数组,每个整数数组给出了在该维度上选择哪些索引位置。布尔数组花式索引是指使用布尔数组来选择元素,它的工作方式与布尔索引相同。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = np.array([0, 2, 4])
print(a[b]) # 输出 [1 3 5]
在这个例子中,整数数组b指定了要选择的索引位置,即[0, 2, 4],然后将其用于a数组中来获取这些元素。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:NumPy数组的高级索引 - Python技术站