当前位置: 代码网 > it编程>前端脚本>Python > NumPy 布尔数组索引的实现示例

NumPy 布尔数组索引的实现示例

2026年01月06日 Python 我要评论
在 numpy 中,布尔数组索引是一种强大的元素选择方式,它通过 “true/false” 的逻辑判断筛选元素。以下是具体用法及带输出注释的示例代码。1 与原数组同形的布尔数组

在 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 布尔数组索引内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com