2013-05-10 32 views
2

我最近遇到困難時,使用scipycoo_matrix轉換爲密集矩陣。我有一個dtype float16稀疏矩陣,並試圖將其轉換爲密集矩陣。該錯誤會報告給出一個類型爲char的數組。不過,我很確定我正在傳遞一個float16類型的數組。Python TypeError使用Scipy's coo_matrix.todense()

錯誤是:

self.Xd_train = X_train.todense() 
File "C:\Python27\lib\site-packages\scipy\sparse\base.py", line 501, in todense 
    return np.asmatrix(self.toarray(order=order, out=out)) 
File "C:\Python27\lib\site-packages\scipy\sparse\coo.py", line 241, in toarray 
    B.ravel('A'), fortran) 
File "C:\Python27\lib\site-packages\scipy\sparse\sparsetools\coo.py", line 175, in coo_todense 
    return _coo.coo_todense(*args) 
TypeError: Array of type 'float' required. Array of type 'char' given 

出現在類構造器的錯誤:

self.Xd_train = X_train.todense() 

矩陣X_train似乎是良好形成並且絕對不char類型:

>> X_train.dtype 
float16 

>> X_train.shape 
(6206, 4712) 

>> type(X_train) 
<class 'scipy.sparse.coo.coo_matrix'> 

>> str(X_train) 

(0, 63)  2.0 
(0, 72)  1.0 
(0, 76)  2.0 
(0, 100)  1.0 
(0, 104)  1.0 
(0, 5)  1.0 
(0, 10)  2.0 
(0, 134)  2.0 
(0, 20)  3.0 
(0, 263)  1.0 
(0, 264)  1.0 
(0, 265)  1.0 
(0, 27)  1.0 
(0, 148)  2.0 
(0, 32)  1.0 
(0, 275)  1.0 
(0, 35)  1.0 
(0, 36)  1.0 
(0, 279)  1.0 
(0, 39)  1.0 
(0, 41)  1.0 
(0, 42)  1.0 
(0, 52)  1.0 
(0, 59)  4.0 
(1, 72)  1.0 
:  : 
(6205, 133) 1.0 
(6205, 134) 4.0 
(6205, 135) 4.0 
(6205, 136) 2.0 
(6205, 137) 6.0 
(6205, 138) 1.0 
(6205, 139) 4.0 
(6205, 20) 4.0 
(6205, 142) 4.0 
(6205, 23) 2.0 
(6205, 24) 2.0 
(6205, 26) 2.0 
(6205, 27) 2.0 
(6205, 32) 1.0 
(6205, 33) 1.0 
(6205, 35) 1.0 
(6205, 36) 1.0 
(6205, 37) 1.0 
(6205, 39) 1.0 
(6205, 40) 1.0 
(6205, 41) 1.0 
(6205, 42) 1.0 
(6205, 43) 1.0 
(6205, 56) 3.0 
(6205, 60) 1.0 

對這個問題可能有什麼想法?另外,讓我知道是否需要額外的細節/信息。

我在Windows 7上使用Python 2.7.2,使用Numpy 1.7和Scipy 0.11。謝謝。

回答

2

此錯誤也出現在最新的scipy master分支中。例如。

>>> coo_matrix([[0]], dtype=np.float16).todense() 

引發相同的異常。數據類型np.float16是比較新的,並且scipy(可能還有其他地方)中有很多未經過測試的代碼。

如果將稀疏矩陣更改爲np.float32,它應該可以工作。 https://github.com/scipy/scipy/issues/2481

+0

感謝您的回答和報告錯誤:

我在SciPy的GitHub的網站上創建一個問題這一點。乾杯! – 2013-05-11 05:25:28

+0

'float16'(和'bool')當前不受支持的數據類型。 – 2013-05-11 12:14:04