2016-05-14 9 views
2

Ich habe eine Adjazenzmatrix eines Graphen A. Nach A = A.sign() gibt es noch einige Elemente, die nicht 1 oder 0 oder -1 sind.Ist Scipys Zeichen() nicht garantiert funktionsfähig?

In [35]: A = A.sign() 

In [36]: A.getcol(0).data 
Out[36]: 
array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,  
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 
     1., 1., 1., 1., 2.]) 

In [37]: A 
Out[37]: 
<519403x519403 sparse matrix of type '<type 'numpy.float64'>' 
    with 3819116 stored elements in COOrdinate format> 

Auf der anderen Seite funktioniert numpy.sign() funktioniert gut.

In [50]: a = A.getcol(0) 

In [51]: np.sum(a.todense()) 
Out[51]: 58.0 

In [52]: np.sum(np.sign(a.todense())) 
Out[52]: 57.0 
+1

Was war der ursprüngliche Wert? –

+0

@OliverCharlesworth Der ursprüngliche Wert ist zu lang, deshalb verwende ich eine dünne Matrix, aber 'A.getcol (0) .data' ist das gleiche wie nach' A.sign() ' – Yfiua

+0

Kannst du herausfinden, welche Werte in Ihre ursprüngliche 'A'-Matrix hat ein" Zeichen "von 2 (zB' A.data [A.sign(). data == 2] ')? –

Antwort

1

Nach ein paar Recherchen bekam ich die Antwort. Es geht nur um die interne Datenstruktur Scipy verwendet.

import numpy as np 
from scipy.sparse import coo_matrix 

xs = np.array([1, 2, 3, 3, 2]) 
ys = np.array([2, 3, 1, 1, 1]) 
A = coo_matrix((np.ones((5,)), (xs, ys))) 

An diesem Punkt A ist ein <4x4 sparse matrix of type '<type numpy.float64'>' with 5 stored elements in COOrdinate format>, obwohl wir zwei Elemente in der gleichen haben (3, 1) koordinieren. Und A = A.sign() führt nur auf den 5 Elementen, die alle 1 an erster Stelle sind.

>>> A.data 
array([ 1., 1., 1., 1., 1.]) 

>>> A.todense() 
matrix([[ 0., 0., 0., 0.], 
     [ 0., 0., 1., 0.], 
     [ 0., 1., 0., 1.], 
     [ 0., 2., 0., 0.]]) 

>>> A = A.sign() 
>>> A.todense() 
matrix([[ 0., 0., 0., 0.], 
     [ 0., 0., 1., 0.], 
     [ 0., 1., 0., 1.], 
     [ 0., 2., 0., 0.]]) 
Verwandte Themen