2

誰が誰に何回電子メールを送信したかを表す整数行列があるとします。ソーシャル ネットワーク分析のために、単純な無向グラフを作成したいと思います。したがって、マトリックスをバイナリマトリックスに変換し、後でタプルのリストに変換する必要があります。

私の質問: 10 進行列を 2 進行列に減らすための高速で便利な方法はありますか。

そのような:

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

なります:

1, 1, 0
1, 1, 1
0, 1, 1
4

3 に答える 3

2

scipy.sign行列のすべてのセルに関数を適用します。

[編集] スペシャスフールへの称賛:

xが行列の場合scipy.sign(x)、バイナリ行列が得られます。

于 2009-10-06T07:14:19.747 に答える
2

次のことができます。

>>> 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 != 0部分にあります。ブール式を配列に適用すると、ブール値の配列が返されます。次に、intに変換されます。

于 2009-10-06T08:20:03.017 に答える
1

これを試すこともできます:

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

これも速くなると思います。

于 2011-12-12T04:55:14.310 に答える