我正在对大量细胞计数数据进行数据分析,并且正在尝试图形聚类。在摆弄的某个时候,我以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的边数不相同?