2014-06-16 3 views
1

J'ai un tableau bidimensionnel de uns et de zéros appelé M où les g lignes représentent des groupes et les colonnes a représentent des articles. M cartographie les groupes et les articles. Si un article donné "art" appartient au groupe "gr" alors nous avons M [gr, art] = 1; sinon, nous avons M [gr, art] = 0. Maintenant, je voudrais convertir M en une matrice axiale carrée de uns et de zéros (appelons-la N) où si un article "art1" est dans le même groupe que l'article "art2", nous avons N (art1, art2) = 1 et N (art1, art2) = 0 autrement. N est clairement symétrique avec des 1 dans la diagonale.Transformation d'une matrice de mappage

Comment construire N basé sur M?

Un grand merci pour vos suggestions - et désolé si c'est trivial (encore nouveau pour Python ...)!

+3

montrant un exemple concret avec le code réel est toujours une bonne idée, beaucoup plus facile de copier-coller de cette façon – Jeff

+0

merci pour les conseils Jeff – Charles

Répondre

2

Vous avez donc une matrice booléenne M comme ce qui suit:

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

et ce que vous voulez est une matrice de forme (narticles, narticles) qui représente co-occurrence. C'est tout simplement la place de la matrice:

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

... sauf que vous ne voulez pas compte, entrées set> 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

merci beaucoup, très élégant, je veux juste que j'avais besoin – Charles

Questions connexes