2014-06-16 108 views
1

我有一個名爲M的1和0的2維數組,其中g行代表組,並且a列代表文章。 M地圖組和文章。如果給定的文章「藝術」屬於「gr」組,那麼我們有M [gr,art] = 1;如果不是,我們有M [gr,art] = 0。如果一篇文章「art1」與文章「art2」位於同一個組中,那麼我們有N(art1,其中, art2)= 1,否則N(art1,art2)= 0。 N與對角線上的1明顯對稱。轉換映射矩陣

如何基於M構造N?

非常感謝您的建議 - 對不起,如果這是微不足道的(仍然是新的python ...)!

+3

一個好主意,更容易複製粘貼方式 – Jeff

+0

感謝您的建議傑夫 – Charles

回答

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 

,你想要什麼是代表co-occurrence形狀(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]]) 
+0

非常感謝,非常優雅,只是想我需要 – Charles