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

Numpy矩阵中快速筛选符合多区间值条件行的方法是什么?

实现方案

你提到的哈希匹配仅支持固定值、不支持区间,numpy也没有内置类正则的数值匹配接口,但用原生的向量化比较+布尔数组运算即可高效实现该需求,针对数百行数据、数十条规则的场景性能完全足够。

核心思路

  • 每条规则拆分为三个等长数组:条件对应列索引、区间下限、区间上限
  • 对每个条件做向量化区间判断,得到布尔矩阵
  • 同规则的所有条件结果按行做与运算,得到每行是否符合该规则的标识

代码实现

以下是基于你提供的示例数据和规则的可运行代码:

import numpy as np

# 示例数据
myData = np.array([[7.241, 7.123, 9.0, 1.2, 1.0, 1.5, 67.14, 162.32], 
                   [8.123, 10.4, 7.68, 1.6, 0.7, 2.3, 21.2, 175.2]])

# 规则结构化:注意示例规则的列计数从1开始,这里转成numpy的0起始索引
# 规则1:(第1列>6<7) & (第4列>0<2) & (第6列>10<50)
rule1_cols = np.array([0, 3, 5])
rule1_low = np.array([6, 0, 10])
rule1_high = np.array([7, 2, 50])

# 规则2:(第3列>10<22) & (第4列>9<15)
rule2_cols = np.array([2, 3])
rule2_low = np.array([10, 9])
rule2_high = np.array([22, 15])

# 通用规则校验函数
def check_rule(data, cols, low, high):
    # 取出对应列,分别判断是否在区间内,所有条件都满足返回True
    cond = (data[:, cols] > low) & (data[:, cols] < high)
    return cond.all(axis=1)

# 校验两个规则
match_rule1 = check_rule(myData, rule1_cols, rule1_low, rule1_high)
match_rule2 = check_rule(myData, rule2_cols, rule2_low, rule2_high)

print("符合规则1的行索引:", np.where(match_rule1)[0])
print("符合规则2的行索引:", np.where(match_rule2)[0])

结果说明

运行上述代码可以得到示例数据中没有符合两个规则的行,和实际人工计算结果一致。

批量多规则校验

如果需要校验数十条规则,可以把所有规则预先存为列表,批量处理即可:

# 所有规则列表,每个元素是(列索引数组, 下限数组, 上限数组)
all_rules = [
    (rule1_cols, rule1_low, rule1_high),
    (rule2_cols, rule2_low, rule2_high)
]

# 批量校验,结果为列表,每个元素对应一条规则的匹配行布尔数组
all_match = [check_rule(myData, *rule) for rule in all_rules]

性能优势

该方案的所有运算都是numpy向量化实现,避免了Python层的循环,即便是10万行数据、上百条规则的场景,整体耗时也在毫秒级别,完全满足常规业务需求。


内容的提问来源于stack exchange,提问作者geekygeek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:09:04