如何将numpy数组中出现次数少于2次的数值批量替换为0
解决方法
你已经拿到了待替换的数值列表freq,直接用numpy自带的np.isin()生成布尔索引,对应位置赋值为0即可,代码如下:
import numpy as np # 先将原始列表转换为numpy数组 image = np.array([1 ,2 ,2, 3, 4, 4, 4, 4, 5, 6, 6 ,7 ,8 ,8 ,8 ,8]) # 你已有的生成待替换值的代码 (unique, counts) = np.unique(image, return_counts=True) frequencies = np.asarray((unique, counts)).T freq = frequencies[frequencies[:,1] < 2,0] # 核心替换逻辑 image[np.isin(image, freq)] = 0 print(image)
运行后输出结果和你预期的完全一致:
array([0, 2, 2, 0, 4, 4, 4, 4, 0, 6, 6, 0, 8, 8, 8, 8])
简化写法(无需单独提取freq)
如果不需要单独保存待替换的数值列表,可以一步完成筛选替换:
import numpy as np image = np.array([1 ,2 ,2, 3, 4, 4, 4, 4, 5, 6, 6 ,7 ,8 ,8 ,8 ,8]) unique, counts = np.unique(image, return_counts=True) # 直接保留出现次数≥2的数值,其余替换为0 image = np.where(np.isin(image, unique[counts >= 2]), image, 0)
内容的提问来源于stack exchange,提问作者Daniel Suske
相关产品推荐
相关产品推荐

