如何使用二维np数组作为输入来创建networkx图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用二维np数组作为输入来创建networkx图相关的知识,希望对你有一定的参考价值。
我的算法输出描述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 =“四面体”>
答案
问题是您如何构建图形。您应该简单地将实例化为一个新图形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]
以上是关于如何使用二维np数组作为输入来创建networkx图的主要内容,如果未能解决你的问题,请参考以下文章