ValueError:缓冲区dtype不匹配,预期'浮动'但得到'双'

时间:2015-01-19 16:36:28

标签: python-2.7 cython

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

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

为什么?我想稍后用浮点值填充数组volatile,所以我想将其格式化为float,而不是double。

1 个答案:

答案 0 :(得分:4)

只需使用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,并在dtype=np.float64的调用中指定empty()