我有这个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
我希望找到一种方法来创建(在本例中为4个)字典,其中每个字典包含每行的2个最大值..
例如,对于第0行,我的字典将是:
dict0 = {12114: '0.27257158100111998', 11998: '0.137415042369'}
和第1行:
dict1 = {10085: '0.216197045661', 9105: '0.1362857905'}
答案 0 :(得分:1)
由于csr_matrix
没有sort()
方法,因此首先将所需的行转换为数组很方便:
a = m[i,:].toarray().flatten()
获取已排序列的位置:
argsa = a.argsort()
最大值位于argsa
的最后一列,因此要获得两个最大值的列是:
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:] ] ) )