numpy的花式引用
在 NumPy
中,花式索引(Fancy Indexing)是一种强大的数组索引方式,允许使用整数数组或布尔数组来访问数组的元素,而不仅仅是通过传统的切片操作。这种方式特别适合从数组中根据条件或特定位置获取元素。下面详细介绍花式索引的几种形式:
1. 整数数组索引(Integer Array Indexing)
通过整数数组来指定数组中要访问的元素,可以是多维的。
import numpy as np
arr1=np.array([1,2,3,4,5,6,7,8])
print(arr1[[0,1,5]])
当然,也可以用index存储指定数组的下标:
import numpy as np
arr1=np.array([1,2,3,4,5,6,7,8])
index=[0,1,5]
print(arr1[index])
同理对二维数组我们也可以进行相同操作
arr2=np.arange(1,17).reshape(4,4)
print(arr2[[0,1,2,3],[0,1,2,3]])
arr2=np.arange(1,17).reshape(4,4)
row=[0,1,2,3]
col=[0,1,2,3]
print(arr2[row,col])
这两行代码都可以打印出二维数组主对角线的元素。
2. 布尔索引(Boolean Indexing)
布尔索引允许通过布尔条件对数组进行筛选。你可以传入一个布尔数组,数组中 True
的位置会保留下来,False
的位置会被过滤掉。
arr = np.array([1, 2, 3, 4, 5, 6])
# 创建一个布尔条件,筛选出所有大于 3 的元素
condition = arr > 3
print(condition) # 输出: [False False False True True True]
# 通过布尔数组进行索引
result = arr[condition]
print(result) # 输出: [4 5 6]
布尔索引是一种非常强大的方式,可以根据条件快速从数组中获取子集,特别适用于数据筛选操作。
3. 组合整数和切片索引
你可以将整数索引和切片一起使用,以选择特定的元素或子数组。
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 使用整数选择第 1 行,然后使用切片选择第 1 列到最后一列的元素
result = arr[1, 1:]
print(result) # 输出: [5 6]
4. 赋值与花式索引
arr = np.array([10, 20, 30, 40, 50])
# 将第 0, 2, 4 个位置的元素修改为 100
arr[[0, 2, 4]] = 100
print(arr) # 输出: [100 20 100 40 100]