You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:36:03