【问题标题】:Cython/Numpy: Float being truncatedCython/Numpy:浮点数被截断
【发布时间】: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”。它没有解决问题,但感谢您的提醒。

标签: python numpy cython


【解决方案1】:

我很笨。我正在使用不同模块中的圆形功能打印出东西。我生命中的 3 个小时,我再也回不来了……

【讨论】:

    猜你喜欢
    • 2017-06-20
    • 2013-12-31
    • 2011-06-07
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多