在以上代码基础之上,将节点及其属性分别转换成邻接矩阵和特征矩阵代码
时间: 2024-03-05 18:52:30 浏览: 23
如果需要将节点及其属性分别转换成邻接矩阵和特征矩阵,可以使用以下代码:
```python
import networkx as nx
import numpy as np
# 创建一个带有节点属性的图形对象
G = nx.Graph()
G.add_node(1, attr1='a', attr2=1)
G.add_node(2, attr1='b', attr2=2)
G.add_node(3, attr1='c', attr2=3)
G.add_edge(1, 2)
G.add_edge(2, 3)
# 将图形对象转换为邻接矩阵
adj_matrix = nx.adjacency_matrix(G).toarray()
# 将节点属性转换为特征矩阵
node_attrs = [G.nodes[i] for i in range(1, len(G.nodes)+1)]
feature_matrix = np.array([list(node_attr.values()) for node_attr in node_attrs])
print('邻接矩阵:')
print(adj_matrix)
print('特征矩阵:')
print(feature_matrix)
```
在这个代码中,我们使用networkx提供的邻接矩阵函数`adjacency_matrix()`将图形对象转换为邻接矩阵,并使用`toarray()`方法将稀疏矩阵转换为稠密矩阵。然后,我们使用列表推导式将所有节点的属性转换为特征矩阵。输出结果如下:
```
邻接矩阵:
[[0 1 0]
[1 0 1]
[0 1 0]]
特征矩阵:
[['a' '1']
['b' '2']
['c' '3']]
```
需要注意的是,这里生成的特征矩阵中的数据类型是字符串,如果需要将其转换为数字类型,可以使用numpy的`astype()`方法进行类型转换。例如,将特征矩阵中的第二列转换为整数类型的代码如下:
```python
feature_matrix[:,1] = feature_matrix[:,1].astype(int)
```