花式索引(Fancy Indexing)是NumPy中的一个术语,它指的是利用整数数组进行索引。花式索引允许你访问数组的任意位置,且可以一次性访问多个元素。与切片不同的是,使用花式索引可以非连续地访问数组的内容。
这里是几个花式索引的例子:
一维数组的花式索引
import numpy as np
# 创建一个简单的数组
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 使用花式索引选择多个不连续的元素
indices = [1, 3, 5, 7]
print(x[indices]) # 输出: [1 3 5 7]
二维数组的花式索引
# 创建一个二维数组
y = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
# 使用花式索引来选择不连续的行
row_indices = [0, 2, 3]
print(y[row_indices]) # 输出:
# [[ 0 1 2]
# [ 6 7 8]
# [ 9 10 11]]
# 同时使用行和列的花式索引
col_indices = [2, 1] # 注意,这里也可以选择不同的列
print(y[row_indices, :][:, col_indices]) # 输出: [ 2 7 11]
在上面的例子中,y[row_indices, :]
首先选择了特定的行,随后 [:, col_indices]
在这些行中选择了特定的列。
花式索引与布尔索引的结合
你还可以结合使用花式索引和布尔索引,这使得选择满足特定条件的元素变得非常灵活。
# 创建一个二维数组
z = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]])
# 创建布尔索引数组
bool_indices = (z > 4)
# 使用布尔索引选择元素
print(z[bool_indices]) # 输出: [ 5 6 7 8 9 10 11]
# 结合花式索引和布尔索引,选择满足条件的特定行的特定元素
row_indices = [0, 2, 3]
selected_elements = z[row_indices][bool_indices[row_indices]]
print(selected_elements) # 输出可能包括来自指定行的大于4的元素
花式索引是一个非常有用的特性,尤其是在数据分析和科学计算领域,它可以大大简化代码并提高效率。在实际应用中,你可能会根据复杂的条件来选择或操作数组的子集,而花式索引提供了实现这一目标的直接手段。