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

如何按值与索引规则配对两个长度相同的一维NumPy数组

配对逻辑实现方案

实现思路

该需求本质是构建二部图的连通分量:将数组a的唯一值、数组b的唯一值作为二部图的两组顶点,每一组索引对应的a值和b值之间连一条边,最终每个连通分量内的a值集合与b值集合即为期望的配对结果。

完整代码

import numpy as np
from collections import defaultdict, deque

# 示例输入
a = np.array([1, 1, 1, 2, 2, 3, 4,  5])
b = np.array([7, 7, 8, 8, 9, 8, 10, 10])

# 构建双向映射关系
a_to_b = defaultdict(set)
b_to_a = defaultdict(set)
for a_val, b_val in zip(a, b):
    a_to_b[a_val].add(b_val)
    b_to_a[b_val].add(a_val)

visited_a = set()
visited_b = set()
result = []

# BFS遍历找连通分量
for a_val in sorted(a_to_b.keys()):
    if a_val not in visited_a:
        q = deque([('a', a_val)])
        current_a = set()
        current_b = set()
        while q:
            type_, val = q.popleft()
            if type_ == 'a' and val not in visited_a:
                visited_a.add(val)
                current_a.add(val)
                for b_val in a_to_b[val]:
                    if b_val not in visited_b:
                        q.append(('b', b_val))
            elif type_ == 'b' and val not in visited_b:
                visited_b.add(val)
                current_b.add(val)
                for a_v in b_to_a[val]:
                    if a_v not in visited_a:
                        q.append(('a', a_v))
        # 排序后存入结果
        result.append((sorted(current_a), sorted(current_b)))

# 输出结果
for a_group, b_group in result:
    print(f"{a_group} 与 {b_group} 配对")

运行结果

[1, 2, 3] 与 [7, 8, 9] 配对
[4, 5] 与 [10] 配对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:15:04