Pergunta

Suponha que eu tenho uma matriz inteiro que representa que tenha enviado a quem e quantas vezes. Para a análise de rede social que eu gostaria de fazer um grafo não direcionado simples. Então eu preciso para converter a matriz de matriz binária e mais tarde em uma lista de tuplas.

A minha pergunta: existe uma maneira rápida, maneira conveniente para reduzir o decimal matriz para um binário matriz.

Tal que:

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

Torna-se:

1, 1, 0
1, 1, 1
0, 1, 1
Foi útil?

Solução

Aplicar a função scipy.sign para cada célula na matriz.

[EDIT] Cudos para speciousfool :

Se x é a sua matriz, em seguida, scipy.sign(x) lhe dá a matriz de binário.

Outras dicas

Você pode fazer o seguinte:

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

A magia está na parte a != 0. Você pode aplicar expressões booleanas para matrizes e ele irá retornar um array de booleanos. Em seguida, ele é convertido para ints.

Você também pode tentar o seguinte:

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

Eu acho que isso também será mais rápido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top