【问题标题】:Is it possible to cast dtype of scipy CSR matrix to NPY_FLOAT?是否可以将 scipy CSR 矩阵的 dtype 转换为 NPY_FLOAT?
【发布时间】:2016-09-21 18:30:56
【问题描述】:

我有一个由 COO 矩阵构成的 scipy CSR 矩阵,如下所示:

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,它告诉我NPY_FLOAT数据类型在C中转换为32位浮点数,而我当前的数据类型对应的是64位双倍的。我在正确的轨道上吗?如果是这样,我如何转换数组的类型?我不完全确定如何调用 NPY_FLOAT 对象来转换它。

对此事的任何帮助将不胜感激!

【问题讨论】:

    标签: python numpy scipy python-c-api


    【解决方案1】:

    我不太清楚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)
    

    因为你指定了一个数据类型

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

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

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

    【讨论】:

    • 感谢您的意见!这正是我面临的问题,我怀疑我需要将数组转换为 NPY_FLOAT dtype 以确保兼容性 - 唉,我不知道该怎么做,也找不到在线文档所以我我什至不知道我是否走在正确的轨道上。
    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多