在 numpy 中,布尔数组索引是一种强大的元素选择方式,它通过 “true/false” 的逻辑判断筛选元素。以下是具体用法及带输出注释的示例代码。
1 与原数组同形的布尔数组索引
创建和原数组形状相同的布尔数组,true 表示选择该元素,false 表示排除。
1.1 基本用法:筛选满足条件的元素
import numpy as np
# 创建一个3行4列的数组(元素0-11)
a = np.arange(12).reshape(3, 4)
print("原数组a:")
print(a)
# output:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 创建与a同形的布尔数组:判断a中元素是否大于4
b = a > 4
print("\n布尔数组b(a > 4的结果):")
print(b)
# output:
# [[false false false false]
# [false true true true]
# [ true true true true]]
# 用布尔数组b索引a,提取所有true位置的元素(返回一维数组)
selected_elements = a[b]
print("\n筛选出的元素:")
print(selected_elements)
# output: [ 5 6 7 8 9 10 11]
1.2 赋值操作:批量修改满足条件的元素
# 继续使用上面的数组a和布尔数组b
a[b] = 0 # 将a中所有>4的元素赋值为0
print("修改后的数组a:")
print(a)
# output:
# [[0 1 2 3]
# [4 0 0 0]
# [0 0 0 0]]
2 按维度的一维布尔数组索引
对每个维度提供一维布尔数组(长度需与对应维度一致),用于选择该维度的 “切片”。
2.1 选择某一维度的切片(以二维数组为例)
import numpy as np
a = np.arange(12).reshape(3, 4) # 3行4列,行索引0-2,列索引0-3
print("原数组a:")
print(a)
# output:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 行选择的布尔数组:长度=行数(3),选择第2、3行(索引1、2)
b1 = np.array([false, true, true])
# 列选择的布尔数组:长度=列数(4),选择第1、3列(索引0、2)
b2 = np.array([true, false, true, false])
# 选择行(第一个维度):等价于a[b1, :]
print("\n选择行(b1为[false, true, true]):")
print(a[b1])
# output:
# [[ 4 5 6 7]
# [ 8 9 10 11]]
2.2 选择列(第二个维度)
print("\n选择列(b2为[true, false, true, false]):")
print(a[:, b2])
# output:
# [[ 0 2]
# [ 4 6]
# [ 8 10]]
2.3 同时选择行和列
print("\n同时选择行和列(b1和b2结合):")
print(a[b1, b2])
# output: [4 10]
# 解释:b1选择行1、2,b2选择列0、2 → 取(1,0)和(2,2)位置的元素:4和10
到此这篇关于numpy 布尔数组索引的实现示例的文章就介绍到这了,更多相关numpy 布尔数组索引内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论