如何拆分社交图(以矩阵形式)?

How to split a social graph (on matrix form)?

我有一个无向二元社交图表示为 2d numpy array,例如像下面的图片。 我想根据二元指标向量将这个矩阵一分为二。

例如,如果我有对应于下图的图表和指标向量 [0,1,1,0,1],我想在一组中使用 [2,3,5],在另一组中使用 [1,4],这样就可以得到一个3x3 和一个 2x2 矩阵。

我似乎无法弄清楚要对 perform/slices 进行哪些排列。 有什么建议吗?

使用 numpy indexing 并不难:

这是一个示例矩阵:

np.random.seed(0)
m = np.random.randint(0, 10, (5, 5))
print(m)

[[5 0 3 3 7]
 [9 3 5 2 4]
 [7 6 8 8 1]
 [6 7 7 8 1]
 [5 9 8 9 4]]

然后从您的指标向量中获取相关组:

indicator = np.array([0,1,1,0,1])
group1 = np.where(indicator == 0)[0] # [0 3]
group2 = np.where(indicator == 1)[0] # [1 2 4]

最后,获取每个相关的列和行:

>>> m[group1, :][:, group1]
[[5 3]
 [6 8]]
>>> m[group2, :][:, group2]
[[3 5 4]
 [6 8 1]
 [9 8 4]]