2017-06-14 15 views
0

接続ノードの異なるクラスタをよりよく見るために、隣接行列を「ソート」する方法はありますか?隣接行列をソートする方法

私はいくつかの行列を持っていますが、パターンはランダムに分布しているように見えます。現実世界では、私は例えばN個の独立したクラスタを持っていることを知っています(間には何の関係もありません)。

したがって、N個の異なるパターンがあるように隣接行列を見たいと思います。

これは達成可能ですか?

更新: 私は昨日時間がない持っていたが、今ここにいくつかの詳細です:事実で

import networkx as nx 
import numpy as np 
import matplotlib.pyplot as plt 
G = nx.Graph() 
S = {'7064', '7065', '7066', '7067', '7068', '7069', '7070', '7071', '7072', '7073', '7074', '7075', '7076', '7077', '7078', '7079', '7080'} 
E = [('7064', '7065'), 
('7067', '7068'), 
('7067', '7076'), 
('7067', '7077'), 
('7067', '7078'), 
('7067', '7079'), 
('7067', '7080'), 
('7067', '7081'), 
('7068', '7076'), 
('7068', '7077'), 
('7068', '7078'), 
('7068', '7080'), 
('7068', '7081'), 
('7069', '7075'), 
('7070', '7072'), 
('7070', '7074'), 
('7071', '7074'), 
('7076', '7077'), 
('7076', '7078'), 
('7076', '7079'), 
('7076', '7080'), 
('7076', '7081'), 
('7077', '7078'), 
('7077', '7079'), 
('7077', '7080'), 
('7077', '7081'), 
('7078', '7079'), 
('7078', '7080'), 
('7078', '7081'), 
('7079', '7080'), 
('7079', '7081'), 
('7080', '7081')] 
G.add_nodes_from(S) 
G.add_edges_from(E) 
adj_matrix = nx.adjacency_matrix(G).toarray() 

plt.imshow(adj_matrix) 

adjacency matrix

、それは対称行列だと私は上三角の世話(サンプル対それ自身)。

sub_graphs = list(nx.connected_components(G)) 
nb_clusters = len(sub_graphs) # total number of sub graphs, including isolated points, there is here 2 isolated points. All other are at least linked with min 1 other point. 

I 6「ブロブ」があるように見えるように隣接行列をたい(それらの二つが2つの分離点のための単一のピクセルであろう)。現在、上三角では視覚的に離れた12の領域が表示されています(実際には行列はOKですが、実際のサブグラフの数に合わせるために再配置したいと考えています)

+3

コード内ではどのように隣接行列が表されていますか?使用しているコードを表示できますか? – mkrieger1

+0

メインポストが編集されました。 –

答えて

0

これはすでにHierarchical clustering of heatmap in pythonで返答されているようですが、受け入れられる回答はありません。

海賊があなたのために自動的に行うことができるのと同じように、ヒートマップの類似性(たとえばユークリッド距離)の行と列をクラスタ化するのが答えです。http://seaborn.pydata.org/generated/seaborn.clustermap.html 隣接行列は、海兵隊員が使用できる通常の行列の特別なケースです。要素は0または1です。

関連する問題