如何使用np.where处理多值场景?数组非指定值置零问题求助
问题修正:保留指定值其余置0的numpy数组处理
原代码的问题在于数组与列表直接比较的广播逻辑不符合预期:二维数组arr和列表labels直接用!=比较时,numpy会尝试将列表广播为和arr同维度的数组,导致条件判断错误,最终返回全0数组。
下面是两种正确的实现方式:
方法1:使用np.isin(推荐,适合任意数量指定值)
import numpy as np arr = np.array(img) labels = [23, 43, 64] # 判断元素是否在指定列表中,不在则替换为0 arr_masked = np.where(np.isin(arr, labels), arr, 0)
方法2:组合多条件判断(适合少量指定值)
import numpy as np arr = np.array(img) # 通过逻辑或组合多个等于判断 arr_masked = np.where((arr == 23) | (arr == 43) | (arr == 64), arr, 0)
说明
np.isin(arr, labels)会生成与arr同形状的布尔数组,True表示对应位置的元素在labels列表中,False则不在。np.where会根据布尔数组的结果,选择保留原数组值(条件为True)或替换为0(条件为False)。
内容的提问来源于stack exchange,提问作者rayan
相关产品推荐
相关产品推荐

