【发布时间】:2011-11-14 18:19:54
【问题描述】:
考虑以下几点:
import numpy as np
cimport numpy as np
DTYPE = np.float
ctypedef np.float_t DTYPE_t
def do(np.ndarray[DTYPE_t, ndim=2] hlc, int days=2):
cdef float dvu = 0.0
cdef Py_ssize_t N = np.shape(hlc)[1]-1, i, j, k
cdef np.ndarray[DTYPE_t] h = hlc[0]
cdef np.ndarray[DTYPE_t] l = hlc[1]
cdef np.ndarray[DTYPE_t] output = np.empty(N+1, dtype=np.float)
for i from 0 <= i <= days-1:
output[i] = np.NaN
for j from N >= j >= days-1:
for k from j >= k >= j-days+1:
dvu += ((h[k] + l[k]) / 2.0) - 1.0
print dvu # prints a float
output[j] = dvu / days
dvu = 0.0
return output
当我发出 dvu 语句时,我得到一个未舍入的浮点数。当我将值设置为 output[j] 并返回输出时,所有值都被四舍五入。我需要用完整的浮点数返回输出 - 四舍五入。对我做错了什么有什么想法吗?
【问题讨论】:
-
np.float对应于 C 数据类型double,而不是float——不确定这是否是您的错误,但至少这是一个值得注意的警告。 -
我将“DTYPE”和“DTYPE_t”分别更改为“np.double”和“np.double_t”。它没有解决问题,但感谢您的提醒。