2016-09-21 82 views
0

我有一個從一個COO矩陣構造的SciPy的CSR矩陣如下:是否可以將dtype的scipy CSR矩陣轉換爲NPY_FLOAT?

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

它被用作輸入,以與下面的C實現圖書館和我相信我的基質的D型是double(np.float64)。不過,我遇到了以下錯誤:

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

我就做了一些研究,發現scipy C-api,它告訴我,NPY_FLOAT數據類型轉換爲32位浮點在C,而當前數據類型我有一個64位的雙倍。我在正確的軌道上嗎?如果是這樣,我該如何施放陣列的類型?我不完全確定如何調用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) 

因爲你指定一個D型細胞

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