是否可以将dip的scipy CSR矩阵转换为NPY_FLOAT?

时间:2016-09-21 18:30:57

标签: python numpy scipy python-c-api

我有一个scipy CSR矩阵,它是从COO矩阵构建的,如下所示:

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

它被用作具有底层C实现的库的输入,我相信我的矩阵的dtype是double(np.float64)。但是,我遇到以下错误:

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

我去做了一些研究并找到scipy C-api,它告诉我{C}中NPY_FLOAT数据类型被转换为32位浮点数,而我所拥有的当前数据类型对应于一个64位的双倍。我在这里走在正确的轨道上吗?如果是这样,我如何转换数组的类型?我不完全确定如何调用NPY_FLOAT对象才能投射它。

对此事的任何帮助都将深表感谢!

1 个答案:

答案 0 :(得分:0)

我不确定coo_matrix界面,我会尝试解释obj, (row, col) = arg1 部分。

由于您正在使用元组输入,因此将其拆分为3个变量

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)

然后将它们分配给属性

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

并且因为您指定了dtype

data

如果rowcolnumpy已经是数组,那么您没有指定dtype,稀疏矩阵可以将这些输入用作属性而无需复制。您的dtype参数将生成副本。

稀疏矩阵不是astype数组,而是具有3个数组作为属性的对象。矩阵接受self.data.astype方法,该方法可能执行相同的{{1}}操作。所以我认为你的情况归结为:你可以将任何数组转换为该类型。