将scipy稀疏coo矩阵转换为networkx图并返回不会产生原始矩阵

时间:2018-10-18 14:32:12

标签: python scipy sparse-matrix networkx graph-theory

我正在对大量细胞计数数据进行数据分析,并且正在尝试图形聚类。在摆弄的某个时候,我以coo格式制作了一个稀疏的稀疏矩阵,将其转换为networkx图,然后再次将其还原。

data.shape

(20000,32)

20000个(细胞)具有32维(生物分子的丰度)

#Create sparse matrix with distance as edge
knn = kneighbors_graph(data.values, n_neighbors=30, mode='distance')
coo = knn.tocoo()
coo

<20000x20000类型为的稀疏矩阵     以COOrdinate格式存储了600000个元素>

搜索30个邻居时,预期有20000个节点具有600000个边

#Build undirected weighted nx graph
nxgraph = nx.Graph(knn)
nxgraph.number_of_edges()

468258

更少的边缘,但不是一半

#Back to coo
cooafter = nx.to_scipy_sparse_matrix(nxgraph, format='coo')
cooafter

<20000x20000类型为的稀疏矩阵     包含以CoOrdinate格式存储的936516个元素>

测试边缘数翻倍

也许我对这些数据结构了解不足,并且这种行为是完全合乎逻辑的。但是,我期望转换为networkx图并返回到同一图,所以谁能解释为什么coo和cooafter的边数不相同?

0 个答案:

没有答案