目录
方法一:使用sparse的._indices()和._values()
方法二:使用Dgl的graph.adj_sparse('coo')
有时候tensor是稀疏型的,比如是coo matrix的tensor:
>>>graph.adj()
tensor(indices=tensor([[ 0, 0, 0, ..., 116380, 116381, 116382],
[110282, 101199, 81804, ..., 116380, 116381, 116382]]),
values=tensor([1., 1., 1., ..., 1., 1., 1.]),
size=(116383, 116383), nnz=350751, layout=torch.sparse_coo)
如果要获取其中的indices和values来构造scipy的coo matrix,有两种办法
方法一:使用sparse的._indices()和._values()
1.使用graph.adj()._indices()方法即可获取indices如下:
tensor([[ 0, 0, 0, ..., 116380, 116381, 116382],
[110282, 101199, 81804, ..., 116380, 116381, 116382]])
2.然后使用.numpy方法即可转换为ndarray,从而获得
横坐标列表:
>>>graph.adj()._indices().numpy()[0]
array([ 0, 0, 0, ..., 116380, 116381, 116382])
?纵坐标列表:
graph.adj()._indices().numpy()[1]
array([110282, 101199, 81804, ..., 116380, 116381, 116382])
3.然后再使用tensor._values()获取values,并转换为ndarray
>>>graph.adj()._values().numpy()
array([1., 1., 1., ..., 1., 1., 1.], dtype=float32)
4.使用scipy的coo_matrix()构造coo matrix
scipy.sparse.coo_matrix((data,(i,i)),shape=(M,N))
完整代码如下:
i=graph.adj()._indices().numpy()[0]
j=graph.adj()._indices().numpy()[1]
data=graph.adj()._indices().numpy()
scipy.sparse.coo_matrix((data,(i,i)),shape=(M,N))
方法二:使用Dgl的graph.adj_sparse('coo')
直接使用Dgl的graph.adj_sparse('coo')方法获取coo matrix坐标,然后自己给出values值
完整代码如下:
rownetworks=graph.adj_sparse('coo')
i=rownetworks[0].numpy()
j=rownetworks[1].numpy()
data=np.ones_like(i)
rownetworks=spp.coo_matrix((data,(i,j)),shape=(features.shape[0],features.shape[0]))
|