我有一个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
对象才能投射它。
对此事的任何帮助都将深表感谢!
答案 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
如果row
,col
和numpy
已经是数组,那么您没有指定dtype,稀疏矩阵可以将这些输入用作属性而无需复制。您的dtype参数将生成副本。
稀疏矩阵不是astype
数组,而是具有3个数组作为属性的对象。矩阵接受self.data.astype
方法,该方法可能执行相同的{{1}}操作。所以我认为你的情况归结为:你可以将任何数组转换为该类型。