drug_graph = dgl.edge_type_subgraph(graph, ['interacts']).adj()这样生成的邻接矩阵可以保存边的值吗
时间: 2024-02-11 09:08:34 浏览: 213
生成的邻接矩阵通常是一个稀疏矩阵,其中每个非零元素表示对应的边存在。这里使用的是dgl库中的函数edge_type_subgraph(),它会返回一个DGLGraph对象,仅包含特定边类型的子图。用.adj()方法可以将该子图转换为一个邻接矩阵。这个邻接矩阵只表示边的存在关系,不包含边的值。
如果需要保存边的值,可以考虑将边的值存储在边的特征中。DGLGraph对象可以使用.edata来访问和修改边的特征。例如,可以使用以下代码将值为val的边属性设置为图中边的权重:
```
drug_graph.edata['edge_weight'] = val
```
这个操作会将图中所有边的edge_weight属性设置为val。如果只想对特定的边进行设置,可以先使用边的索引获取特定的边,然后再进行赋值操作。
相关问题
dgl 加载bin文件,获得邻接矩阵,不允许使用adj_matrix = graph.adjacency_matrix().to_dense()
如果您不想使用`adj_matrix = graph.adjacency_matrix().to_dense()`来获得邻接矩阵,可以使用以下方法:
方法一:使用`dgl.to_scipy`将邻接矩阵转换为稀疏矩阵,然后使用`toarray()`方法将稀疏矩阵转换为稠密矩阵:
```python
import dgl
import numpy as np
with open('graph.bin', 'rb') as f:
graph_data = np.load(f, allow_pickle=True)
graph = dgl.graph((graph_data['edge_index'][0], graph_data['edge_index'][1]))
adj_matrix = dgl.to_scipy(graph.adjacency_matrix())
dense_matrix = adj_matrix.toarray()
```
方法二:使用`dgl.backend.numpy()`将邻接矩阵转换为numpy数组,然后使用`numpy.ndarray`的`tolist()`方法将numpy数组转换为Python列表:
```python
import dgl
import numpy as np
with open('graph.bin', 'rb') as f:
graph_data = np.load(f, allow_pickle=True)
graph = dgl.graph((graph_data['edge_index'][0], graph_data['edge_index'][1]))
adj_matrix = graph.adjacency_matrix()
dense_matrix = dgl.backend.numpy()((adj_matrix != 0).astype(np.int32)).tolist()
```
需要注意的是,这两种方法都会将邻接矩阵转换为稠密矩阵,如果邻接矩阵过大,可能会导致内存溢出或性能问题。如果需要处理大规模的邻接矩阵,建议使用稀疏矩阵进行计算。
dgl 加载bin文件,获得邻接矩阵,不允许使用adj_matrix = graph.adjacency_matrix()
如果您不想使用`adj_matrix = graph.adjacency_matrix()`来获得邻接矩阵,可以使用以下方法:
方法一:使用`dgl.to_networkx`将dgl图对象转换为NetworkX图对象,然后使用NetworkX提供的方法获得邻接矩阵:
```python
import dgl
import networkx as nx
import numpy as np
with open('graph.bin', 'rb') as f:
graph_data = np.load(f, allow_pickle=True)
graph = dgl.graph((graph_data['edge_index'][0], graph_data['edge_index'][1]))
nx_graph = dgl.to_networkx(graph)
adj_matrix = nx.adjacency_matrix(nx_graph)
```
方法二:使用`dgl.to_scipy`将邻接矩阵转换为稀疏矩阵,然后使用`toarray()`方法将稀疏矩阵转换为稠密矩阵:
```python
import dgl
import numpy as np
with open('graph.bin', 'rb') as f:
graph_data = np.load(f, allow_pickle=True)
graph = dgl.graph((graph_data['edge_index'][0], graph_data['edge_index'][1]))
adj_matrix = dgl.to_scipy(graph.adjacency_matrix())
dense_matrix = adj_matrix.toarray()
```
需要注意的是,这两种方法都会将邻接矩阵转换为稠密矩阵,如果邻接矩阵过大,可能会导致内存溢出或性能问题。如果需要处理大规模的邻接矩阵,建议使用稀疏矩阵进行计算。
阅读全文