ValueError:缓冲区dtype不匹配,应为'float',但为'double'

use*_*418 2 cython python-2.7

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

cdef np.ndarray[float] vola = np.empty(n, dtype=float)
Run Code Online (Sandbox Code Playgroud)

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

gg3*_*349 6

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

带有cythonmagic的ipython中的示例(在此处查看示例):

%%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])
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为numpyfloat是C double。

编辑:对于更可移植/可维护的代码,您可以使用np.float64_t代替double,并dtype=np.float64在调用中指定empty()。