Domanda

Supponiamo di avere una matrice numero intero che rappresenta il quale ha mandato quali e quante volte. Per l'analisi di social network mi piacerebbe fare un semplice grafo non orientato. Quindi ho bisogno di convertire la matrice di matrice binaria e successivamente in una lista di tuple.

La mia domanda: c'è un modo conveniente veloce per ridurre la matrice decimale a una matrice binaria.

Tale che:

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

diventa:

1, 1, 0
1, 1, 1
0, 1, 1
È stato utile?

Soluzione

Applica la funzione scipy.sign ad ogni cellula nella matrice.

[EDIT] Congratulazioni a speciousfool :

Se x è la matrice allora scipy.sign(x) ti dà la matrice binaria.

Altri suggerimenti

È possibile effettuare le seguenti operazioni:

>>> 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 è nella parte a != 0. È possibile applicare le espressioni booleane per gli array e sarà restituire un array di booleani. Poi viene convertito in int.

Si può anche provare questo:

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

Credo che questo sarà anche più veloce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top