2016-05-14 7 views
2

私はグラフの隣接行列Aを持っています。 A = A.sign()の後には、まだ1または0または-1でない要素がいくつかあります。Scipyのsign()は動作保証されていませんか?

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> 

一方、numpy.sign()は問題ありません。

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

元の値は何ですか? –

+0

@OliverCharlesworth元の値が長すぎるため、疎な行列を使用していますが、 'A.getcol(0).data'は' A.sign() 'の後と同じです – Yfiua

+0

あなたの元の 'A'マトリックスは2の' sign 'を与えました(例えば、A.data [A.sign()。data == 2] ')? –

答えて

1

私は答えを得ました。すべて内部データ構造Scipyを使用しています。我々は同じ座標(3, 1)に2つの要素を持っているが、この時点でA

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

は、<4x4 sparse matrix of type '<type numpy.float64'>' with 5 stored elements in COOrdinate format>あります。 A = A.sign()は5つの要素に対してのみ実行され、最初はすべて1です。

>>> 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.]]) 
関連する問題