我得到了一个元素列表及其各自的节点列表,我想切换查找它们的方式。我想要一个节点列表及其各自元素的列表。
例:
Have
E N
1 1 2 3
2 2 3 4
3 1 4
Desired
N E
1 1 3
2 1 2
3 1 2
4 2 3
我有一个嵌套的循环解决方案。
# known data
elements = [
[], # No element 0
[1, 2, 3],
[2, 3, 4],
[1, 4],
]
max_element = 3
max_node = 4
# truth
truth_nodes = [
[],
[1, 3],
[1, 2],
[1, 2],
[2, 3],
]
# current algorithm
nodes = [[] for n in range(max_node+1)]
for node in range(1, max_node + 1):
for element in range(1, max_element + 1):
if node in elements[element]:
nodes[node].append(element)
Python中是否有其他工具,无论是NumPy,Pandas还是其他工具,都可以加速超过300,000个元素的速度?如果这是一个通用算法,它的名字是什么和/或我如何找到它?
编辑:这是图形算法吗?
我可以想象上面的节点以及我的元素的顶点,并使用 NetworkX 制作无向图。那么我会使用连接的组件算法吗?
我最终使用了一个pandas DataFrame,其中有node
列和element
列,并且属于单个元素的每对单个节点都有一行。
Node Element
1 1
2 1
3 1
2 2
3 2
4 2
1 3
4 3
我相信这是遵循Hadley Wickham的Tidy Data。然后我可以通过布尔索引df[df.node==1]
调用给定的node
,同样,对于一个元素,df[df.element==3]
。
我仍然不确定这是否是一种图形算法,但是以这种方式组织我的数据使我能够继续处理其余的问题。