2014-01-17 36 views
2

我有一個scipy稀疏矩陣(csr:壓縮稀疏行矩陣)。我想使用Orange的功能選擇方法(Orange.feature.scoring.score_all(InfoGain/MDL))。然而,從我的理解,我將不得不創建一個表只接受一個numpy數組作爲參數。因此,每當我試圖把企業社會責任矩陣轉換爲數組,使用(.toarray()),我得到以下錯誤(因爲矩陣的大小):如何解決ValueError:數組太大的錯誤?

Traceback (most recent call last): 
    File "C:\Users\NMS\Desktop\PyExp\experiments_acl2013.py", line 249, in <module> 
    print(X_train.toarray()) 
    File "C:\Python27\lib\site-packages\scipy\sparse\compressed.py", line 561, in toarray 
    return self.tocoo(copy=False).toarray(order=order, out=out) 
    File "C:\Python27\lib\site-packages\scipy\sparse\coo.py", line 238, in toarray 
    B = self._process_toarray_args(order, out) 
    File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 635, in _process_toarray_args 
    return np.zeros(self.shape, dtype=self.dtype, order=order) 
ValueError: array is too big. 

是否有另一種方法,可以讓我通過一個稀疏矩陣來創建一個表? 或 有沒有辦法在Orange中應用InfoGain或MDL,而不直接使用我的稀疏矩陣創建表格?

傳遞MEMMAP表時,我收到以下錯誤:

>>> t2 = Table(d2, mm) 

Traceback (most recent call last): 
    File "<pyshell#125>", line 1, in <module> 
    t2 = Table(d2, mm) 
    TypeError: invalid arguments 

當經過MEMMAP出域,我得到以下幾點:

>>> mm 
memmap([[0, 1, 2, 4], 
     [9, 8, 6, 3]]) 
>>> t2 = Table(mm) 

Traceback (most recent call last): 
    File "<pyshell#128>", line 1, in <module> 
    t2 = Table(mm) 
TypeError: invalid arguments for constructor (domain or examples or both expected) 

回答

0

這裏去解決方法。對於給定的coo_matrix稱爲m(與m.tocoo()獲得):

1)創建numpy.memmap陣列,用於寫入:

mm = np.memmap('test.memmap', mode='w+', dtype=m.dtype, shape=m.shape) 

2)中的數據複製到MEMMAP陣列,這應該工作:

for i,j,v in zip(m.row, m.col, m.data): 
    mm[i,j] = v 

3)您可以訪問memmap詳細the documentation...

+0

我需要一個numpy數組傳遞給T能夠(Domain,Numpy_array)創建表。 – user2179347

+0

我猜你可以通過memmap數組,我試過了嗎? –

+1

我已將我的memmap通過試用版從[文檔](http://orange.biolab.si/docs/latest/reference/rst/Orange.data.table/#Orange.data)添加到 – user2179347

相關問題