Python 使用sklearn'尝试阵列()/todense()时出现内存错误;s计数矢量器

Python 使用sklearn'尝试阵列()/todense()时出现内存错误;s计数矢量器,python,scikit-learn,scipy,nlp,text-mining,Python,Scikit Learn,Scipy,Nlp,Text Mining,我正在尝试使用CountVectorizer创建文档术语矩阵。我的数据报得到了大约18万行数据。以下是我正在使用的代码: from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer(stop_words='english') X = cv.fit_transform(df.content) #X is a scipy sparse matrix data_dtm = pd.DataFrame(

我正在尝试使用CountVectorizer创建文档术语矩阵。我的数据报得到了大约18万行数据。以下是我正在使用的代码:

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(stop_words='english')

X = cv.fit_transform(df.content) #X is a scipy sparse matrix
data_dtm = pd.DataFrame(X.toarray(), columns=cv.get_feature_names())
这里我得到了一个错误: MemoryError:无法为具有形状(18039952142)和数据类型int64的数组分配70.1 GiB

我在todense()上尝试了同样的方法,并且:

data_dtm = pd.DataFrame(X.todense(), columns=cv.get_feature_names())
但还是一样。我知道问题出在toarray()/todense()上 我发现了几个关于将这些函数应用于稀疏矩阵的类似问题,但没有得到有效的答案。例如,使用asarray()


谢谢你的帮助

看起来
x
是一个scipy稀疏矩阵。您可以通过显示
类型(x)
来验证它。该错误告诉我们,您的计算机中没有足够的空间来制作密集的、
ndarray
等价物。这样的阵列太大(70GB)。事实上,你也尝试了
todense
np.asarray
告诉我,你要么不理解这个问题,要么拒绝接受它是一个问题。没有办法!谢谢你的回复。是的,我知道需要大约70GB,但希望找到一种有效的方法来解决这个问题。这对于处理文本挖掘/nlp问题来说是个麻烦。我想知道是否有一种方法可以在多个块中完成这项工作?!什么是
180399*52142*8
?这就是这样一个数组所需的空间(以字节为单位)。有很多ML算法可以接受稀疏输入。Pandas还可以从scipy稀疏格式转换为其自己的稀疏数据类型列,如果出于某种原因确实需要Pandas框架。