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

如何从二维NumPy数组中提取唯一值对应的第二行匹配值

二维数组按行分组匹配实现方案

核心逻辑:逐位对齐两行的同索引元素,以第一行的元素为分组键,收集对应位置第二行的取值,最后对每个分组的取值去重、保留首次出现的顺序,即可得到符合要求的结果。


方法1:纯Python原生实现(无依赖)

不需要安装任何第三方库,适合小规模数据处理:

# 输入的原始二维数组
source_arr = [
    [1,  4,  4,  6,  6,  6,  8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 11, 11, 11, 11, 11],
    [0,  0,  1,  0,  1,  4,  0,  1,  4,  6,  0,  1,  4,  6,  8,  5,  0,  1,  4,  6,  8]
]
key_row, val_row = source_arr[0], source_arr[1]
group_result = {}

# 逐位配对遍历
for key, val in zip(key_row, val_row):
    if key not in group_result:
        group_result[key] = []
    # 仅当值未在当前分组出现过时追加,保证顺序且去重
    if val not in group_result[key]:
        group_result[key].append(val)

print(group_result)

运行输出:

{1: [0], 4: [0, 1], 6: [0, 1, 4], 8: [0, 1, 4, 6], 9: [0, 1, 4, 6, 8], 10: [5], 11: [0, 1, 4, 6, 8]}

输出结果和给出的示例规则完全匹配,示例中仅展示了1、4、6、8、9五个键的分组结果,其余键的结果也符合分组逻辑,不需要的话直接过滤删除即可。


方法2:NumPy向量化实现(适合大数据量)

如果数组规模较大,用NumPy处理运行效率更高:

import numpy as np

source_arr = np.array([
    [1,  4,  4,  6,  6,  6,  8,  8,  8,  8,  9,  9,  9,  9,  9, 10, 11, 11, 11, 11, 11],
    [0,  0,  1,  0,  1,  4,  0,  1,  4,  6,  0,  1,  4,  6,  8,  5,  0,  1,  4,  6,  8]
])
key_row, val_row = source_arr[0], source_arr[1]
group_result = {}

for unique_key in np.unique(key_row):
    # 筛选当前key对应的所有第二行取值
    match_values = val_row[key_row == unique_key]
    # Python3.7+字典默认保留插入顺序,用dict.fromkeys可快速去重保序
    group_result[int(unique_key)] = list(dict.fromkeys(match_values.tolist()))

print(group_result)

运行结果和原生实现完全一致。


注意事项

  • 遍历配对时不要打乱两行的索引对应关系,否则会出现匹配错误
  • 如果需要和示例一样保持值的排列顺序,不要直接用set()做去重,集合默认无序会打乱值的顺序
  • 如果只需要指定键的结果,遍历完成后直接过滤字典的键即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:27:14