首页 > 解决方案 > numba 给出正确结果的否定,这是一个错误吗?

问题描述

更新我已经在另一个win10中测试过,但一切都很好。

我将在我的问题电脑中重新安装 anaconda。

update2我已经重新安装了anaconda。numba 一开始有效;但是,问题在一天后又回来了,WTF。


简化示例如下,浪费了一天时间找到:

Python 3.7.2 (default, Jan  2 2019, 17:07:39) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numba as nb

In [2]: import numpy as np

In [3]: nb.__version__
Out[3]: '0.39.0'

In [4]: np.__version__
Out[4]: '1.15.1'

In [5]: @nb.njit("f8[:](f8[:], f8)")
   ...: def fast_ema(value: np.ndarray, decay: float) -> np.ndarray:
   ...:     ema = np.empty_like(value)
   ...:     avg = 0.0
   ...:     for i in range(len(value)):
   ...:         avg = avg * decay + value[i] * (1 - decay)
   ...:         ema[i] = avg
   ...:     return ema
   ...:         

In [6]: def slow_ema(value: np.ndarray, decay: float) -> np.ndarray:
   ...:     ema = np.empty_like(value)
   ...:     avg = 0.0
   ...:     for i in range(len(value)):
   ...:         avg = avg * decay + value[i] * (1 - decay)
   ...:         ema[i] = avg
   ...:     return ema
   ...:     

In [7]: value = np.arange(10, dtype='f8')

In [9]: fast_ema(value, 0.5)
Out[9]: 
array([ 0.        , -0.5       , -1.25      , -2.125     , -3.0625    ,
       -4.03125   , -5.015625  , -6.0078125 , -7.00390625, -8.00195312])

In [10]: slow_ema(value, 0.5)
Out[10]: 
array([0.        , 0.5       , 1.25      , 2.125     , 3.0625    ,
       4.03125   , 5.015625  , 6.0078125 , 7.00390625, 8.00195312])

In [11]: Out[9].dtype
Out[11]: dtype('float64')

In [12]: Out[10].dtype
Out[12]: dtype('float64')

标签: pythonnumpynumba

解决方案


推荐阅读