【发布时间】:2015-01-20 01:04:50
【问题描述】:
我编译了一个 Cython 脚本并运行它。 运行它时,我从以下代码行收到错误:
cdef np.ndarray[float] vola = np.empty(n, dtype=float)
这是为什么呢?我想稍后用浮点值填充数组 vola,所以我想将其格式化为浮点数,而不是双精度数。
【问题讨论】:
标签: python-2.7 cython
我编译了一个 Cython 脚本并运行它。 运行它时,我从以下代码行收到错误:
cdef np.ndarray[float] vola = np.empty(n, dtype=float)
这是为什么呢?我想稍后用浮点值填充数组 vola,所以我想将其格式化为浮点数,而不是双精度数。
【问题讨论】:
标签: python-2.7 cython
只需使用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。
【讨论】: