Python 将sklearn CountVectorizer矩阵转换为字典列表

Python 将sklearn CountVectorizer矩阵转换为字典列表,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我已经用CountVectorizer创建了一个矩阵 [[1, 2, 1....], [0, 4, 0,...], [0, 0, 7....]] 其中,每列映射到要素名称 ['sweet', 'pretty', 'bad'....] 我想做什么 将矩阵的行转换为表单的字典列表 [{'sweet': 1, 'pretty': 2, 'bad': 1 ..} , {'sweet': 0, 'pretty': 4, 'bad': 0 ..} , {'sweet': 0, 'pretty':

我已经用CountVectorizer创建了一个矩阵

[[1, 2, 1....],
 [0, 4, 0,...],
 [0, 0, 7....]]
其中,每列映射到要素名称

['sweet', 'pretty', 'bad'....]
我想做什么

将矩阵的行转换为表单的字典列表

[{'sweet': 1, 'pretty': 2, 'bad': 1  ..} , {'sweet': 0, 'pretty': 4, 'bad': 0  ..} , {'sweet': 0, 'pretty': 0, 'bad': 7  ..}]
这基本上是做
逆变换
功能的
DictVectorizer
所做的,但是由于我没有从字典中创建矩阵,我认为我不能使用它,因为我得到了这个错误

“DictVectorizer”对象没有属性“feature\u names\u”


我如何做到这一点?NumPy是否提供了一个内置函数来将数组转换为字典列表,以便将每列映射到给定的键

您要查找的函数是get\u feature\u names
不确定是否有一个内置的方式来实现你想要的,但它是很容易实现的一个简单的地图

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer() 

#`data` is an array of strings

tdata = cv.fit_transform(data) 

ft = cv.get_feature_names() 

#create a dictionary with feature names as keys and row elements as values

result = list(map(lambda row:dict(zip(ft,row)),tdata.toarray()))
编辑:内存节省解决方案

import pandas as pd

df = pd.SparseDataFrame(tdata, columns=ft)

将帮助提供一些样本
数据
另请参见。最后一行是我要找的,谢谢。然而,我正在处理一个超过百万行的文本文件,所以它给了我一个内存错误。我认为如果我能将数组转换为pandas DataFrame可能会很有效,它确实有一个内置的方法来实现这一点,但我得到了“DataFrame构造函数没有正确调用!”当我执行DataFrame(data=X,columns=ft)时,你可以使用类似
df=pd.DataFrame(tdata.toarray(),columns=ft)
或更好的方法,稀疏数据帧
df=pd.SPARSTAFRAME(tdata,columns=ft)
对我不起作用,但它确实起作用了:
pd.dataframe.sparse.from_spmatrix(tdata,columns=ft)