变换一个映射矩阵



我有一个由1和0组成的二维数组M,其中g行代表组,a列代表条目。M映射组和文章。如果给定条目"art"属于组"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…)!

所以你有一个布尔矩阵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)的矩阵,它表示共现。这就是矩阵的平方:

>>> 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]])

最新更新