2016-09-21 2 views
0

私は次のようにCOO行列から構築されたscipyのダウンロードCSRマトリックス持っている:それは、基礎となるCの実装とライブラリへの入力として使用されている、と私は私の行列のDTYPEと信じscipy CSRマトリックスのdtypeをNPY_FLOATにキャストすることはできますか?

coord_mat = coo_matrix((data, (row, col)), dtype=np.float64) 

double(np.float64)です。現在ながら、私はいくつかの研究を行うに行き、scipy C-apiを見つけ

ValueError: Buffer dtype mismatch, expected 'flt' but got 'double' 

NPY_FLOATデータ型はCでの32ビット浮動小数点に変換されていることを教えてくれました。しかし、私は次のようなエラーに遭遇しています私が持っているデータ型は64ビットのdoubleに対応しています。私は正しい道にここにいますか?もしそうなら、どのように配列の型をキャストしますか?私はそれをキャストするためにNPY_FLOATオブジェクトをどのように呼び出すことができるかについて完全にはわかりません。

この件に関するお手伝いをいただければ幸いです。

答えて

0

Cインターフェイスについてわからない場合は、coo_matrixの部分について説明します。

それは3つの変数

obj, (row, col) = arg1 

に、それは属性

self.row = np.array(row, copy=copy, dtype=idx_dtype) 
self.col = np.array(col, copy=copy, dtype=idx_dtype) 
self.data = np.array(obj, copy=copy) 

とにそれらを割り当てること分割タプル入力を使用しているので、あなたはDTYPEを指定するので

if dtype is not None: 
    self.data = self.data.astype(dtype) 

data,rowcol dtypeを指定しなかった場合は、スパース行列はこれらの入力をコピーせずに属性として使用できます。あなたのdtypeパラメータはコピーを生成します。

スパース行列はnumpy配列ではなく、属性として3つの配列を持つオブジェクトです。この行列はastypeメソッドを受け入れます。これはおそらく同じself.data.astypeアクションです。だから私はあなたのケースは次のようになると思います:どのタイプの配列にでもキャストできますか?

+0

ありがとうございました!それは正確に私が直面している問題です、私は 'NPY_FLOAT' dtypeに互換性を確保するために配列をキャストする必要があると思っています - まあ私はそうする方法がわかりませんし、私が正しい道にいるのかどうかについての手がかりはありません。 – andre

関連する問題