我有一个 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 http://docs.scipy.org/doc/numpy/reference/c-api.dtype.html#c.NPY_FLOAT,这告诉我NPY_FLOAT
在 C 中,数据类型转换为 32 位浮点型,而我当前的数据类型对应于 64 位双精度型。我走在正确的轨道上吗?如果是这样,我如何转换数组的类型?我不完全确定如何致电NPY_FLOAT
对象以便投射它。
任何有关此事的帮助将不胜感激!
我不确定C
界面,我将尝试解释coo_matrix
part.
由于您使用的是元组输入,因此它将其分为 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)
If data
, row
and col
已经是数组,任何您没有指定数据类型的稀疏矩阵都可以使用这些输入作为属性而无需复制。您的 dtype 参数将生成一个副本。
稀疏矩阵不是numpy
数组,而是一个具有 3 个数组作为属性的对象。该矩阵接受astype
方法,它可能会做同样的事情self.data.astype
行动。所以我认为你的情况可以归结为:你可以将任何数组转换为该类型吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)