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

如何在Numpy二维数组中移除重复无向边?

移除无向图边数组中的反向重复项

方法一:排序后去重(高效推荐)

利用Numpy的向量化操作快速处理,先将每条边的两个节点按从小到大排序,让反向边变成完全相同的行,再去重:

import numpy as np

# 假设你的边数组是edges
edges = np.array([[24, 79], [79, 24], [10, 20], [20, 10], [5, 15]])

# 对每条边的节点排序,统一格式
sorted_edges = np.sort(edges, axis=1)
# 按行去重,保留唯一边
unique_edges = np.unique(sorted_edges, axis=0)

print(unique_edges)
# 输出:[[ 5 15]
#        [10 20]
#        [24 79]]

这种方法性能优异,处理15000行数据毫无压力,Numpy底层的C实现比Python循环快得多。

方法二:保留首次出现的原始边

如果你希望保留数组中先出现的那条边(而不是排序后的格式),可以用Python循环结合集合记录已出现的节点对:

import numpy as np

edges = np.array([[24, 79], [79, 24], [10, 20], [20, 10], [5, 15]])

seen = set()
unique_edges = []
for u, v in edges:
    # 检查当前边和反向边是否都未被记录
    if (u, v) not in seen and (v, u) not in seen:
        seen.add((u, v))
        unique_edges.append([u, v])

unique_edges = np.array(unique_edges)
print(unique_edges)
# 输出:[[24 79]
#        [10 20]
#        [ 5 15]]

这种方法会保留原始数组中第一次出现的边的方向,但对于超大规模数组,效率不如第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:15:37