Numpy多条件筛选数组报错:logical_and()参数数量超出范围求助
解决Numpy多条件筛选的问题
报错原因
np.logical_and() 仅能接受2-3个位置参数(两个布尔数组+可选的where参数),你直接传入4个条件数组,超出了参数范围,因此触发TypeError。
正确实现方式
根据你描述的需求(筛选指定索引范围的元素并加255),分两种场景给出解决方案:
场景1:基于数组索引筛选(匹配你的原始描述)
先生成数组的索引序列,再用**逻辑或(or)组合两个区间的逻辑与(and)**条件,得到筛选掩码:
import numpy as np # 假设Q7是你的目标numpy数组 indices = np.arange(Q7.shape[0]) # 生成对应长度的索引数组 # 创建筛选掩码:索引在[1000,200000] 或 [400000,600000] mask = np.logical_or( np.logical_and(indices >= 1000, indices <= 200000), np.logical_and(indices >= 400000, indices <= 600000) ) # 给符合条件的元素加255 Q7[mask] += 255
也可以用更简洁的布尔运算符(必须加括号,避免运算符优先级导致的逻辑错误):
mask = ((indices >= 1000) & (indices <= 200000)) | ((indices >= 400000) & (indices <= 600000)) Q7[mask] += 255
场景2:如果实际是基于元素值筛选(你的代码写法暗示的可能需求)
如果你的真实需求是筛选元素值在这两个区间的元素,只需把上述代码中的indices替换为Q7即可:
mask = np.logical_or( np.logical_and(Q7 >= 1000, Q7 <= 200000), np.logical_and(Q7 >= 400000, Q7 <= 600000) ) Q7[mask] += 255
内容的提问来源于stack exchange,提问作者kristinek
相关产品推荐
相关产品推荐

