私はスパースlil_matrix形式を使用して2種類の関係のグラフを格納しています。これは私がやっていることです:lil_matrixを使用した複数の関係グラフの分割
e=15
k= 2
X = [lil_matrix((e,e)) for i in range(k)]
#storing type 0 relation#
X[0][0,14] =1
X[0][0,8] =1
X[0][0,9] =1
X[0][0,10] =1
X[0][1,14] =1
X[0][1,6] =1
X[0][1,7] =1
X[0][2,8] =1
X[0][2,9] =1
X[0][2,10] =1
X[0][2,12] =1
X[0][3,6] =1
X[0][3,12] =1
X[0][3,11] =1
X[0][3,13] =1
X[0][4,11] =1
X[0][4,13] =1
X[0][5,13] =1
X[0][5,11] =1
X[0][5,10] =1
X[0][5,12] =1
#storing type 1 relation#
X[1][14,7] =1
X[1][14,6] =1
X[1][6,7] =1
X[1][6,8] =1
X[1][6,9] =1
X[1][10,9] =1
X[1][10,8] =1
X[1][10,11] =1
X[1][12,8] =1
X[1][12,10] =1
X[1][12,11] =1
X[1][12,13] =1
X[1][14,12] =1
X[1][11,9] =1
X[1][8,7] =1
X[1][8,9] =1
私はノードの50%だけを含むネットワークを剪定したいと思います。私が近づいている方法:
nodes_list = range(e)
total_nodes = len(nodes_list)
get_percentage_of_prune_nodes = np.int(total_nodes * 0.5)
new_nodes = sorted(random.sample(nodes_list,get_percentage_of_prune_nodes))
e_new= get_percentage_of_prune_nodes
k_new= 2
#Y is the pruned matrix#
Y = [lil_matrix((e_new,e_new)) for i in range(k_new)]
for i in xrange(e):
for j in xrange(e):
for rel in xrange(k_new):
if i in new_nodes and j in new_nodes:
if X[rel][i,j]==1:
Y[rel][new_nodes.index(i),new_nodes.index(j)] = 1
オリジナルの行列(X)が巨大な場合、これはあまり効率的ではありません。これを剪定する最速または賢明な方法はありますか?
クイックリードでは、プルーニングが何をしているのかを視覚化するのは難しいです。しかし、私はこれを改善する2つの方法を想像することができます。 1)密な配列と配列全体の操作でこれを行う方法を理解する。 2)オーバーヘッドの少ない構造を探索する。たとえば、 'dok'マトリックスや'(i、j) 'タプルキーを持つ普通の辞書ですらあります。特別な疎なマトリックス機能は使用していません。 – hpaulj