词频矩阵TfidfVectorizer结果与稀疏矩阵csr_matrix的遍历

关系

TfidfVectorizer的结果是由csr_matrix这种方式组织的,在数据结构中稀疏矩阵的实现是csr_matrix。这是由于矩阵中有大量的0元素占据了大量的空间,从而采用稀疏矩阵来压缩空间。

csr_matrix可以调用toarray()方法转变为真正的矩阵,利用numpy的索引方式来进行对元素的精确索引。

问题

但是有时候由于矩阵太大,而使得csr_matrix转变为numpy矩阵时,计算机的内存会“爆掉”。使得无法转变,这就会带来一个问题——无法使用简洁的方式来索引元素。

解决方法

getrow()方法,需要输入行号,可以取出对应的行的数据,在利用toarray()来将其转变为numpy的单行矩阵,就可以索引了。

getcol()方法,与上述方法类似,但是以列为单位处理。

__getitem__()方法,需要输入一个元组,这个tuple是代表了矩阵中元素的下标位置,返回的是对应位置的数据。

示例

print(csr)
>>(0, 40831)	0.21960834178465002
  (0, 30192)	0.10678123442791115
  (0, 10846)	0.18189940521778225
  (0, 22745)	0.20618725734599005
  (0, 45612)	0.0976692130846666
  (0, 40065)	0.24275078611018666
  (0, 49428)	0.05342573253991302
  (0, 45671)	0.17495487380802463
  (0, 21370)	0.11474053386714585
  (0, 29358)	0.057332939970307854
  (0, 40742)	0.2676618164681293
  (0, 44919)	0.20567536750057577
  (0, 42582)	0.32131715612054834
  (0, 30483)	0.3411862682847532
  (0, 27925)	0.1492153155544641
  (0, 39765)	0.2333712052409058
  (0, 22138)	0.32131715612054834
  (0, 35148)	0.3411862682847532
  (0, 38124)	0.3411862682847532
  (1, 46983)	0.36753693775292995
  (1, 27355)	0.24008825527611988
  (1, 24111)	0.2894764022964109
  (1, 44361)	0.15111782785302094
  (1, 40344)	0.7361023494519706
  (1, 30192)	0.2733685656483771
  :	:
  (108621, 39426)	0.5882450458501409
  (108621, 44361)	0.2551328023049197
  (108621, 29358)	0.2478040763357938
  (108622, 11503)	0.41317392611973686
  (108622, 10238)	0.47357367792387195
  (108622, 14307)	0.2072486799175126
  (108622, 11804)	0.28687179999939544
  (108622, 17701)	0.2946483987714427
  (108622, 3473)	0.2979900334309786
  (108622, 16957)	0.16972003662264928
  (108622, 47038)	0.2466369829395856
  (108622, 10105)	0.17218931039751523
  (108622, 1453)	0.2693420943820634
  (108622, 27073)	0.24521646611592904
  (108622, 13406)	0.07691004761215771
  (108622, 24111)	0.16248297773383003
  (108622, 44361)	0.08482237054018961
  (108622, 49428)	0.07677128778575688
  (108622, 29358)	0.08238583590362115
  (108623, 21272)	0.6327215632236254
  (108623, 45606)	0.5355979771231804
  (108623, 24044)	0.34391766732789003
  (108623, 30050)	0.27389383741176027
  (108623, 46971)	0.325932888948742
  (108623, 29358)	0.11519021730398242
csr.__getitem__((0, 40831))
>>0.21960834178465002
row_list = csr.getrow(0)
row_list = row_list.toarray()
row_list[0. 40831]
>>0.21960834178465002
col_list = res.getcol(40831)
col_list = col_list.toarray()
col_list[0, 0]
>>0.21960834178465002

你可能感兴趣的:(Python学习,python,人工智能,算法)