将稀疏矩阵转换为密集矩阵时的Python内存错误

时间:2016-10-13 13:22:38

标签: python numpy matrix

我想在python中计算文档的Tfidf值。我的基本方法如下:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer(max_df=0.5,stop_words="english")
tfidf_matrix = tfidf_vectorizer.fit_transform(clean_tweet)

tfidf_matrix=tfidf_matrix.astype('float32')
termss = tfidf_vectorizer.get_feature_names()

toarry=tfidf_matrix.todense()# this step return a Memoryerror.

工作得非常好,但不幸的是,当我尝试将稀疏矩阵转换为密集toarry=tfidf_matrix.todense()时,python返回MemoryError。 tfidf_matrix的维度为(6602141,320297),它是一个稀疏矩阵。此外,我有100G的内存可用。我搜索了一些解决方案,比如使用np.memmapHDF5Store,但我我不确定。

那么有没有人知道如何将稀疏矩阵转换为密集而没有内存错误?

P.S。 我剩下的代码是

flattern=toarry.sum(axis=0)
#flattern= map(sum,zip(*toarry))
tfidf=np.array(flattern).reshape(-1,).tolist()
merge={'terms':termss,
       'tfidf':tfidf}
tfidf_object=pd.DataFrame(merge)
#tfidf_object.index.name="termss"
#print termss[-10:],"____",tfidf[-10:]
tfidf_objects=tfidf_object.sort_index(by=["tfidf"],ascending=False)

我想将密集矩阵转换为一维矩阵,因此我可以获得前100个tfidf-words。

0 个答案:

没有答案