2009-10-06 11 views
2

Supposons que j'ai une matrice d'entiers qui représente qui a envoyé un courriel à qui et combien de fois. Pour l'analyse de réseaux sociaux, j'aimerais faire un simple graphique non orienté. J'ai donc besoin de convertir la matrice en matrice binaire et plus tard en une liste de tuples.Convertir une matrice décimale en une matrice binaire dans SciPy

Ma question: existe-t-il un moyen rapide et pratique de 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 

Répondre

2

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.

+0

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

2

Vous pouvez effectuer les opérations suivantes:

>>> 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 à des tableaux et retourner un tableau de booléens. Ensuite, il est converti en ints.

1

Vous pouvez aussi essayer ceci:

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

Je pense que ce sera aussi plus rapide.

Questions connexes