我有一个无向二进制社交图表,表示为2d numpy array
,例如如下图所示。
我想基于二进制指示符向量将此矩阵拆分为两个。
例如,如果我有与下图对应的图表和指标向量[0,1,1,0,1]
,我想在一个组中[2,3,5]
,在另一个组中有[1,4]
,从而给我一个{{ 1}}和3x3
矩阵。
我似乎无法确定要执行哪些排列/切片。 有什么建议吗?
答案 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]]