1

私はこのscipy csr_matrixを持っています:

  (0, 12114) 0.272571581001
  (0, 12001) 0.0598986479579
  (0, 11998) 0.137415042369
  (0, 11132) 0.0681428952502
  (0, 10412) 0.0681428952502
  (1, 10096) 0.0990242494495
  (1, 10085) 0.216197045661
  (1, 9105) 0.1362857905
  (1, 8925) 0.042670696769
  (1, 8660) 0.0598986479579
  (2, 6577) 0.119797295916
  (2, 6491) 0.0985172979468
  (3, 6178) 0.1362857905
  (3, 5286) 0.119797295916
  (3, 5147) 0.270246307076
  (3, 4466) 0.0540492614153
  (4, 3810) 0.0540492614153
  (4, 3773) 0.0495121247248

そして、各辞書に各行の2つの最大値が含まれる辞書(この場合は4つ)を作成する方法を見つけたい..

たとえば、行 0 の場合、辞書は次のようになります。

dict0 = {12114: '0.27257158100111998', 11998: '0.137415042369'}

行 1 の場合:

dict1 = {10085: '0.216197045661', 9105: '0.1362857905'}
4

1 に答える 1

1

csr_matrixメソッドがないためsort()、最初に必要な行を配列に変換すると便利です。

a = m[i,:].toarray().flatten()

ソートされた列の位置を取得するには:

argsa = a.argsort()

最大値は の最後の列にargsaあるため、2 つの最大値の列を取得するには、次のようにします。

argsa[-2:]

ペアを取得するにはcolumn, value:

argsa[-2:], a[ argsa[-2:] ]

そして、これは辞書に変換できます:

dict( zip( argsa[-2:], a[ argsa[-2:] ] ) )

最終的な関数は次のようになります。

def get_from_m(m, i, numc=2):
    a = m[i,:].toarray().flatten()
    argsa = a.argsort()
    return dict( zip( argsa[-numc:], a[ argsa[-numc:] ] ) )
于 2013-08-07T17:23:07.120 に答える