np.mean()导致内存不足错误

时间:2014-02-27 07:25:53

标签: python sql-server numpy out-of-memory scikit-learn

我在SQL Server 2008中有一个表,它有2800万行。我只对一列感兴趣,并希望对该列执行一些文本分析。

作为第一步,我限制我的查询返回大约120万行(只有1列有文本数据)。

我正在使用以下代码来矢量化和计算每列的平均值,其中每列代表整个词汇表中的一个单词。

vectorizer = TfidfVectorizer(min_df=2, stop_words='english',tokenizer=tokenize)
X_train = vectorizer.fit_transform(trainer)
meanArray = np.mean(X_train.toarray(),axis=0)

遇到X_train.toarray()时,我收到以下错误:

Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/Support_Dot_Com/PROD1_Analysis.py", line 69, in <module>
    meanArray = np.mean(X_train.toarray(),axis=0)
  File "C:\Anaconda\lib\site-packages\scipy\sparse\compressed.py", line 790, in toarray
    return self.tocoo(copy=False).toarray(order=order, out=out)
  File "C:\Anaconda\lib\site-packages\scipy\sparse\coo.py", line 239, in toarray
    B = self._process_toarray_args(order, out)
  File "C:\Anaconda\lib\site-packages\scipy\sparse\base.py", line 699, in _process_toarray_args
    return np.zeros(self.shape, dtype=self.dtype, order=order)
MemoryError

我知道.toarray()将稀疏矩阵转换成一个正在耗尽内存的numpy ndarray。有没有办法在不使用.toarray()的情况下做同样的事情?

1 个答案:

答案 0 :(得分:2)

正如Alexandre Iolov在评论中所建议的那样,只需在稀疏矩阵上调用mean方法:

X_train.mean(axis=0)