我编译了一个Cython脚本并运行它。 运行它时,我从以下代码行收到错误:
cdef np.ndarray[float] vola = np.empty(n, dtype=float)
为什么?我想稍后用浮点值填充数组volatile,所以我想将其格式化为float,而不是double。
答案 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()
。