2014-02-27 125 views
1

的我在SQL Server 2008中,其有28萬行的表。我只對一列感興趣,並希望對該列執行一些文本分析。作爲第一步,我限制了我的查詢返回大約120萬行(只有1列有文本數據)。我使用下面的一段代碼來向量化和計算每列的平均值,其中每列表示整個詞彙表中的一個詞。np.mean()導致內存不足的錯誤

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()?

在這方面的任何幫助深表感謝。

+2

如果X_train是SciPy的稀疏矩陣,你可以調用它的均值函數: HTTP:/ /docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.lil_matrix.mean.html#scipy.sparse.lil_matrix.mean –

+0

我用下面的:meanArray = scipy.sparse.lil_matrix.mean(X_train,軸= 0),得到了以下錯誤:回溯(最近最後調用): 文件 「C:/Users/Administrator/PycharmProjects/Support_Dot_Com/PROD1_Analysis.py」,線76,在 meanArray = scipy.sparse.lil_matrix.mean(X_train,axis = 0) TypeError:unbound方法必須使用lil_matrix實例調用mean()作爲第一個參數(改爲獲得csr_matrix實例) – Patthebug

+0

您可以輕鬆地在不同格式之間進行轉換稀疏矩陣,文檔顯示如何(我認爲你可以只說X_train = lil_matrix(X_train),但驗證) –

回答

2

正如意見建議由亞歷山大Iolov,只需撥打稀疏矩陣mean方法:

X_train.mean(axis=0) 
+0

這顯然是做到這一點的方式,但是你嘗試過嗎? –

+0

@AaronHall:是的,我試過了。我也寫了'TfidfVectorizer'代碼的一部分,並攻擊了'scipy.sparse',所以我知道這些操作非常好。 –

+0

非常好,+1。我會從評論中推薦它,但沒有更好的知識來阻止我。 –

相關問題