Question

Supposons que j'ai une matrice entière qui représente qui a envoyé par courrier électronique qui et combien de fois. Pour l'analyse de réseau social, je voudrais faire un simple graphe non orienté. Donc, je dois convertir la matrice à matrice binaire et plus tard dans une liste de tuples.

Ma question: est-il un moyen rapide, pratique pour réduire la matrice décimale à une matrice binaire.

tel que:

26, 3, 0
3, 195, 1
0, 1, 17

Devient:

1, 1, 0
1, 1, 1
0, 1, 1
Était-ce utile?

La solution

Appliquer la fonction scipy.sign à toutes les cellules de la matrice.

[EDIT] Cudos speciousfool :

Si x est votre matrice alors scipy.sign(x) vous donne la matrice binaire.

Autres conseils

Vous pouvez faire ce qui suit:

>>> import scipy
>>> a = scipy.array((12, 0, -1, 23, 0))
array([12,  0, -1, 23,  0])
>>> (a != 0).astype(int)
array([1, 0, 1, 1, 0])

La magie est dans la partie a != 0. Vous pouvez appliquer des expressions booléennes pour les tableaux et il retournera un tableau de booléens. Ensuite, il est converti en ints.

Vous pouvez aussi essayer ceci:

>>>x,y = scipy.where(yourMatrix>0)
>>>yourMatrix[:,:] = 0
>>>yourMatrix[x,y] = 1

Je suppose que ce sera aussi plus rapide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top