如何拆分社交图(以矩阵形式)?
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]]
我有一个无向二元社交图表示为 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]]