如何筛选Numpy数组负值并排除存在对应正等值的元素
Numpy数组筛选实现方案
需求说明
给定数组x = np.array([20000, 700, 1000, -5000, -250, 30, -1000, 50, -30, 75, -999]),需要剔除绝对值已经在前面位置出现过的元素,最终仅保留符合条件的负数元素,输出结果为[-5000 -250 -999]。
实现代码
写法1:遍历实现(逻辑直观)
import numpy as np x = np.array([20000, 700, 1000, -5000, -250, 30, -1000, 50, -30, 75, -999]) seen_abs = set() result = [] for num in x: current_abs = abs(num) if current_abs not in seen_abs: seen_abs.add(current_abs) if num < 0: result.append(num) y = np.array(result) print(y)
输出:
[-5000 -250 -999]
写法2:Numpy向量化实现(适合大规模数组)
import numpy as np x = np.array([20000, 700, 1000, -5000, -250, 30, -1000, 50, -30, 75, -999]) abs_x = np.abs(x) # 获取每个绝对值第一次出现的索引 _, first_idx = np.unique(abs_x, return_index=True) # 生成首次出现的布尔掩码 mask = np.zeros(len(x), dtype=bool) mask[first_idx] = True # 筛选首次出现且为负数的元素 y = x[mask & (x < 0)] print(y)
输出:
[-5000 -250 -999]
逻辑说明
- 先维护已出现的绝对值集合,确保只保留每个绝对值第一次出现的元素
- 再从首次出现的元素中仅筛选负数,即可得到目标结果
- 两种写法均严格按照数组顺序判断「前面是否已出现相同绝对值」,符合需求要求
内容的提问来源于stack exchange,提问作者user270199
相关产品推荐
相关产品推荐

