如何直接对NumPy中np.where获取的索引进行交集或并集运算?
解决方案:直接操作NumPy索引求并集与交集
没问题,我来帮你解决这个直接基于已获取索引计算并集、交集的问题,不用重新编写条件逻辑:
一、获取索引并集(初始需求)
首先要注意:np.where返回的是包含索引数组的元组(一维数组场景下格式为(索引数组,)),所以第一步得先把索引数组从元组里提取出来,再用np.union1d计算两个索引的并集,最后用并集索引去原数组取值:
import numpy as np a = np.array([1,2,3,4,5,6,7,8,9,10]) ind1 = np.where(a>8) ind2 = np.where(a<3) # 提取元组中的索引数组 idx1 = ind1[0] idx2 = ind2[0] # 计算两个索引的并集(自动去重并排序) union_idx = np.union1d(idx1, idx2) # 获取对应结果 result = a[union_idx] print(result) # 输出: [ 1 2 9 10]
二、获取索引交集(修正后需求)
同样先提取索引数组,再用np.intersect1d计算两个索引的交集,就能得到同时满足两个条件的元素位置:
import numpy as np a = np.array([1,2,3,4,5,6,7,8,9,10]) ind1 = np.where(a>8) ind2 = np.where(a>3) # 提取元组中的索引数组 idx1 = ind1[0] idx2 = ind2[0] # 计算两个索引的交集 intersect_idx = np.intersect1d(idx1, idx2) # 获取对应结果 result = a[intersect_idx] print(result) # 输出: [ 9 10]
如果是多维数组场景,np.where会返回多维度的索引元组,你可以用同样的思路对每个维度的索引分别计算并集/交集,再用np.ix_重构多维索引即可,一维场景下上面的方法完全够用。
内容的提问来源于stack exchange,提问作者BAO
相关产品推荐
相关产品推荐

