转换映射矩阵

时间:2014-06-16 17:35:49

标签: python-2.7 numpy pandas

我有一个名为M的1和0的二维数组,其中g行代表组,a列代表文章。 M映射组和文章。如果给定的文章"艺术"属于集团" gr"然后我们有M [gr,art] = 1;如果不是,我们有M [gr,art] = 0。

现在,我想将M转换为正方形a x为1和0的矩阵(称之为N),其中如果有文章" art1"与文章" art2"在同一组中,我们有N(art1,art2)= 1和N(art1,art2)= 0。 N在对角线上与1对明显对称。

如何根据M构建N?

非常感谢您的建议 - 如果这是微不足道的抱歉(对于python来说还是新手......)!

1 个答案:

答案 0 :(得分:2)

所以你有一个类似于下面的布尔矩阵M

>>> M
array([[1, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 1],
       [0, 0, 1, 0, 0, 0],
       [1, 0, 1, 0, 0, 0]])
>>> ngroups, narticles = M.shape

你想要的是一个形状(narticles, narticles)的矩阵,代表co-occurrence。这只是矩阵的平方:

>>> np.dot(M, M.T)
array([[1, 0, 0, 1],
       [0, 2, 0, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 2]])

...除了你不想要计数,所以设置条目> 0到1。

>>> N = np.dot(M, M.T)
>>> N[N > 0] = 1
>>> N
array([[1, 0, 0, 1],
       [0, 1, 0, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 1]])