1

オーバーラップ ブロック状態の各ノードのブロック メンバーシップを numpy 配列に変換するにはどうすればよいですか?

具体的には、重複するブロックオブジェクトを推測する場合、重複するメンバーシップ配列は次のように復元できるようです

blockobject = gt.minimize_blockmodel_dl(g, overlap = True)
blockpropertyvector = blockobject.get_overlap_blocks()[0]

これを numpy 配列に変換するには、特定のノードのメンバーシップの最大数 (max_overlaps と呼びましょう) を把握する必要があるようです。その後、2 次元配列に変換できます。

blockpropertyvector.get_2d_array(range(max_overlaps))

しかし、今は結果をどのように解釈すればよいかわかりません。この行列の最初の行が各ノードの最初のメンバーシップの割り当てであるというのは本当ですか? もしそうなら、2 番目の行はノードが存在する場合は 2 番目のメンバーシップの割り当てであり、存在しない場合は 0 であると言いたいと思います。しかし、0 はブロック番号の可能性があるので、0-i 番目のブロックに重複するメンバーシップが含まれているかどうかはどうすればわかりますか?

4

1 に答える 1

1

実際、この方法では、メンバーシップの欠如とグループ ゼロへのメンバーシップを区別することはできません。

あなたができる最も簡単なことは、単にノードをループすることだと思います:

bv = state.get_overlap_blocks()[0]
b = zeros((g.num_vertices(), max_B))
for v in g.vertices():
    b[int(v),:len(b[v])] = bv[v].a + 1

上記では、値 0 はメンバーシップがないことを意味し、r > 0 の値はグループ r - 1 へのメンバーシップを意味します。

于 2016-05-16T09:05:46.270 に答える