如何使用二维np数组作为输入来创建networkx图

问题描述 投票:0回答:1

我的算法输出描述3D空间(x,y,z)中对象的一组顶点。在这种情况下,有两个对象:

verts = 
[[0.1 1.  1. ]  [1.  1.  0.1]  [1.  0.1 1. ]  [1.  1.  1.9]  [1.  1.9 1. ]
 [1.9 1.  1. ]  [7.1 8.  8. ]  [8.  8.  7.1]  [8.  7.1 8. ]  [8.  8.  8.9]
 [8.  8.9 8. ]  [8.9 8.  8. ]]

有两个四面体,一个限制在(1,1,1)中心,另一个限制在(8,8,8)中心。我的目标是使用广度优先搜索来确定对象是分开的,然后对每个对象进行分类。我无法以正确的格式获取算法的数据。

相反,我打算使用networkx模块,特别是使用Graph类,该类将ndarrays作为输入。我已经尝试过:

import networkx as nx
import numpy as np

graph = Graph(verts)
for idx, graph in enumerate(nx.connected_components(graph)):
    print("Graph ",idx, " in ", graph,'\n\n',file=open("output.txt","a"))     

但是,我无法创建图形。相反,我得到了错误:

"Input is not a correct numpy matrix or array.")
networkx.exception.NetworkXError: Input is not a correct numpy matrix or array.

这使我感到困惑,因为verts的类型= numpy.ndarray。

我愿意使用networkx来完成此任务,也可以制定其他策略。另外,请告诉我是否有任何修改可使这篇文章更加清晰。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLmltZ3VyLmNvbS9oN05Yc0NELnBuZyJ9” alt =“四面体”>

python graph networkx breadth-first-search
1个回答
0
投票

问题是您如何构建图形。您应该简单地将实例化为一个新图形g = nx.Graph(),然后使用其方法添加其节点或边。在这种情况下,您要从嵌套列表中添加其路径:

G = nx.Graph()

for path in verts:
    G.add_path(path)

然后获得连接的组件:

list(nx.connected_components(G))
# [{0.1, 1.0, 1.9}, {7.1, 8.0, 8.9}]
© www.soinside.com 2019 - 2024. All rights reserved.