2

coo_matrix最近、を使用して を密行列に変換するときに問題が発生しましたscipy。dtypefloat16疎行列があり、それを密行列に変換しようとしています。エラーは、 type の配列が与えられたことについて不平を言いますchar。ただし、 type の配列を渡していることは確かですfloat16

エラーは次のとおりです。

    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

問題が何であるかについて何か考えはありますか?また、追加の詳細/情報が必要な場合はお知らせください。

Numpy 1.7 と Scipy 0.11 を使用して、Windows 7 で Python 2.7.2 を使用しています。ありがとう。

4

1 に答える 1

2

このエラーは、最新の scipy master ブランチでも発生します。例えば

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

同じ例外を発生させます。データ型np.float16は比較的新しく、scipy (およびおそらく他の場所) には、テストされていないコードがたくさんあります。

疎行列を に変更するとnp.float32、機能するはずです。

scipy github サイトでこれに関する問題を作成しました: https://github.com/scipy/scipy/issues/2481

于 2013-05-11T00:43:15.527 に答える