目录
花式索引(Fancy Indexing)
示例 1:一维数组的花式索引
示例 2:二维数组的花式索引
索引技巧
布尔索引
组合索引
使用np.ix_进行多维花式索引
花式索引是指使用整数数组作为索引来访问数组中的元素。这种方式与基本的索引不同,它允许我们一次性获取数组中不连续的多个元素。
import numpy as np
# 创建一个一维数组
arr = np.arange(1, 10)
print("Original array:", arr)
# 使用花式索引获取指定元素
indices = [2, 5, 7]
selected_elements = arr[indices]
print("Selected elements:", selected_elements)
输出:
Original array: [1 2 3 4 5 6 7 8 9]
Selected elements: [3 6 8]
花式索引也适用于二维数组,可以一次性访问数组中的多行、多列或多个不连续的元素。
# 创建一个二维数组
arr_2d = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
print("2D array:\n", arr_2d)
# 使用花式索引选择数组的多行
rows_to_select = [0, 2]
selected_rows = arr_2d[rows_to_select]
print("Selected rows:\n", selected_rows)
# 使用花式索引选择数组的多列
cols_to_select = [1, 2]
selected_cols = arr_2d[:, cols_to_select]
print("Selected columns:\n", selected_cols)
输出:
2D array:
[[10 20 30]
[40 50 60]
[70 80 90]]
Selected rows:
[[10 20 30]
[70 80 90]]
Selected columns:
[[20 30]
[50 60]
[80 90]]
NumPy 还提供了更多索引技巧,使数组操作更加灵活。
布尔索引允许我们使用布尔数组作为索引来选择数组中满足特定条件的元素。
# 创建一个简单的数组
arr = np.array([10, 20, 30, 40, 50])
# 创建一个布尔数组
bool_indices = (arr > 20)
print("Boolean indices:", bool_indices)
# 使用布尔索引选择元素
selected_elements = arr[bool_indices]
print("Selected elements:", selected_elements)
输出:
Boolean indices: [False False True True True]
Selected elements: [30 40 50]
我们可以组合使用基本切片和花式索引来实现更复杂的数据选择。
# 创建一个二维数组
arr_2d = np.array([[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]])
# 使用组合索引访问元素
selected_elements = arr_2d[1:3, [1, 3]]
print("Selected elements:\n", selected_elements)
输出:
Selected elements:
[[ 60 80]
[100 120]]
np.ix_
进行多维花式索引np.ix_
函数可以帮助我们使用花式索引来选择多维数组中的特定区域。
# 创建一个三维数组
arr_3d = np.arange(27).reshape(3, 3, 3)
print("3D array:\n", arr_3d)
# 使用 np.ix_ 选择特定区域
selected_region = arr_3d[np.ix_([0, 2], [0, 1], [0, 2])]
print("Selected region:\n", selected_region)
输出:
3D array:
[[[ 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 25 26]]]
Selected region:
[[[ 0 2]
[ 3 5]]
[[18 20]
[21 23]]]