我有一个二维 numpy 数组,其中每一行包含 2 个整数。我想找到属于共享公共(public)元素的行的所有元素组(a.k.a 来自 edgelist 数组的图形的连接组件)。例如,对于数组:
[[ 0 4]
[ 0 7]
[ 1 2]
[ 1 13]
[ 2 1]
[ 2 9]
[ 3 14]
[ 3 16]
[ 4 0]
[ 4 5]
[ 5 4]
[ 5 6]
[ 6 5]
[ 6 7]
[ 7 0]
[ 7 6]]
将包含组
[[ 0 4 5 6 7]
[ 1 2 13 9]
[ 3 14 16]]
最佳答案
如果你可以使用库,假设你的数组是 a
(注意你不能将组件作为 numpy 数组,因为它们可以是 numpy 中不存在的非矩形数组,所以这会输出它们作为集合):
import networkx as nx
G=nx.Graph()
G.add_edges_from(a)
print(sorted(nx.connected_components(G), key = len, reverse=True))
#[{0, 4, 5, 6, 7}, {1, 2, 13, 9}, {16, 3, 14}]
如果您需要一个没有额外库的纯 numpyic 解决方案,请查看这个通用解决方案: https://stackoverflow.com/a/61764414/4975981
关于python - 查找共享共同元素的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64072233/