2016-09-21 95 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