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

时间:2018-04-11 20:02:16

标签: python numpy machine-learning linear-algebra

我有一个无向二进制社交图表,表示为2d numpy array,例如如下图所示。 我想基于二进制指示符向量将此矩阵拆分为两个。

例如,如果我有与下图对应的图表和指标向量[0,1,1,0,1],我想在一个组中[2,3,5],在另一个组中有[1,4],从而给我一个{{ 1}}和3x3矩阵。

我似乎无法确定要执行哪些排列/切片。 有什么建议吗?

enter image description here

1 个答案:

答案 0 :(得分:2)

对于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]]