NumPy高级索引:如何通过布尔数组运算得到目标数组?
实现方法
首先导入NumPy库并定义给定数组:
import numpy as np a = np.array([False, True, True, False, True]) b = np.array([False, True, False])
核心思路是定位a中为True的元素位置,将这些位置的元素与b逐一进行布尔与运算,用简洁代码实现如下:
c = a.copy() c[a] &= b
代码解释
c = a.copy():先复制原数组a,避免修改原始数据c[a]会自动筛选出c中所有对应a为True的元素(此处数量恰好与b的长度匹配),&= b将这些元素依次与b中的元素执行布尔与运算,最终得到的c就是目标数组。
运行后验证结果:
print(c) # 输出:array([False, False, True, False, False])
如果需要更直观的分步写法,也可以拆分为:
# 提取a中True的位置 true_positions = a == True # 初始化与a形状相同的空数组 c = np.zeros_like(a) # 将b的元素赋值到True位置,再与原a做与运算确保False位置保持False c[true_positions] = b c = c & a
该写法与前者效果完全一致,更便于理解逻辑。
内容的提问来源于stack exchange,提问作者Sengiley
相关产品推荐
相关产品推荐

