Pregunta

Supongamos que tengo una matriz de enteros que representa que ha enviado por correo electrónico a quién y cuántas veces. Para el análisis de redes sociales que me gustaría hacer un simple grafo no dirigido. Así que necesito para convertir la matriz a matriz binaria y más tarde en una lista de tuplas.

Mi pregunta: ¿hay una manera rápida y conveniente para reducir la matriz decimal a una matriz binaria.

tal que:

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

Se convierte en:

1, 1, 0
1, 1, 1
0, 1, 1
¿Fue útil?

Solución

Aplicar la función scipy.sign a cada célula en la matriz.

[EDIT] Cudos a speciousfool :

Si x es su matriz a continuación scipy.sign(x) le da la matriz binaria.

Otros consejos

Puede hacer lo siguiente:

>>> 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 magia está en la parte a != 0. Puede aplicar expresiones booleanas a matrices y va a devolver una matriz de booleanos. Entonces se convierte a ints.

También puede probar esto:

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

Creo que esto también será más rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top