如何使用二维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图的主要内容,如果未能解决你的问题,请参考以下文章

如何使用networkx图作为sklearn的输入

Numpy:如何使用数组的最后一个维度作为值?

如何创建二维数组

在 scikit learn using networkX 中使用二维数据点形成图形

使用 np.where 在二维数组中查找匹配行

numpy创建二维数组