【问题标题】:ValueError: Buffer dtype mismatch, expected 'float' but got 'double'ValueError:缓冲区 dtype 不匹配,预期为“float”但得到“double”
【发布时间】:2015-01-20 01:04:50
【问题描述】:

我编译了一个 Cython 脚本并运行它。 运行它时,我从以下代码行收到错误:

cdef np.ndarray[float] vola = np.empty(n, dtype=float)

这是为什么呢?我想稍后用浮点值填充数组 vola,所以我想将其格式化为浮点数,而不是双精度数。

【问题讨论】:

    标签: python-2.7 cython


    【解决方案1】:

    只需使用cdef np.ndarray[double] vola = np.empty(n, dtype=float)

    使用 cythonmagic 在 ipython 中的示例(参见示例 here):

    %%cython
    import numpy as np
    cimport numpy as np
    cpdef foo(n):
        cdef np.ndarray[double] vola = np.empty(n, dtype=float)
        return vola
    
    foo(4)  #output :
    array([ 2.14079666e-314, 2.14079666e-314, 2.17357252e-314, 2.78136356e-309])
    

    发生这种情况是因为 numpy 浮点数是 C double

    编辑:对于更便携/可维护的代码,您可以使用np.float64_t 而不是double,并在对empty() 的调用中指定dtype=np.float64

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-05
      • 2018-12-25
      • 2017-10-14
      • 2014-11-07
      • 2020-07-31
      • 2019-09-10
      • 2021-11-12
      • 2021-07-31
      相关资源
      最近更新 更多