2011-11-14 33 views
0

考慮以下幾點:用Cython/numpy的:浮子可截斷

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聲明,我得到一個未四捨五入的浮點數。當我將該值設置爲輸出[j]並返回輸出時,所有值都被舍入。我需要用完整的浮點數返回輸出 - 四捨五入。任何想法我做錯了什麼?

+0

'np.float'對應於C數據類型'double',而不是'float' - 不知道這是你的錯誤,但至少這是一個值得注意的警告。 –

+0

我將「DTYPE」和「DTYPE_t」分別更改爲「np.double」和「np.double_t」。它沒有解決問題,但感謝提醒。 –

回答

0

我很笨。我在一個不同的模塊中使用循環函數打印出來的東西。有3個小時我的生活,我永遠不會回來......