2016-05-13 85 views
1

如何将重叠块状态中每个节点的块成员转换为numpy数组?图形工具重叠块对象

具体来说,推断重叠块对象时,它看起来像重叠成员阵列可以

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

将其转换成numpy的阵列恢复,看来我们需要有最大的一个想法成员对于任何给定节点的数量(可以称之为max_overlaps),然后我们就可以转换为二维数组

blockpropertyvector.get_2d_array(range(max_overlaps)) 

但现在我不知道如何解释结果。这个矩阵的第一行是否是每个节点的第一个成员分配是真的吗?如果是这样,那么我想说的是,第二行是节点的第二个成员资格分配(如果存在),否则为0。但0是可能的块号,那么我们如何知道0-i块是否包含重叠的成员资格?

回答

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 

通过以上,零值意味着缺乏的会员,和r的值> 0意味着籍R组 - 1.

+0

我认为在最后一个字符串中的正确选择是: ':len(bv [v] .a)'而不是':len(b [v])'因为每次返回最后一个'max_B'值 – lucidyan