我想在Nopython模式下运行的Numba函数中创建日期数组。
我看不到日期类型,所以我正在尝试NPDatetime。
我尝试输入的代码是:
import numba as nb
import numpy as np
@nb.jit(nopython=True)
def xxx():
return np.empty(10, dtype=nb.types.NPDatetime('D'))
print(xxx())
但是,代码返回此错误:
Unknown attribute 'NPDatetime' of type Module(<module 'numba.types' from '/home/xxx/anaconda3/lib/python3.6/site-packages/numba/types/__init__.py'>)
我的numba版本是0.39.0
答案 0 :(得分:3)
编辑:
我必须纠正自己,numba支持numpy.empty()
和datetime64
:
Numba支持以下Numpy标量类型:[...]日期时间和时间戳:任何单位[...]
来源:Section 2.7.1
numpy.empty()
(仅前两个参数)
来源:Section 2.7.3.3
不知道是什么原因导致了您的问题。
您错误地指定了dtype
参数。 Numpy不使用numba类。您可以按照以下方法正确指定dtype
:(了解更多here和here)
dtype="datetime64[D]"
但是,即使您以这种方式指定了参数,它也不起作用。 nopython
的{{1}}参数本身不支持该类型。这是更正后的代码:(了解更多here)
@nb.jit()
但是考虑给numba一个类型提示:
import numba as nb
import numpy as np
@nb.jit
def xxx():
return np.empty(10, dtype="datetime64[D]")
print(xxx())
答案 1 :(得分:2)
我以前从未使用过numba或numpy,因此进行了一些研究,但这应该可行。
import numba as nb
import numpy as np
from numba import *
def xxx():
return np.empty(10, dtype=np.dtype(np.datetime64('2014')))
jitcompute = nb.jit(nopython=True)(xxx)
print(xxx())
让我知道这是否可行!
如评论中所述,我的代码是在未实现即时装饰器的情况下执行的,在以后的研究中,似乎存在一个错误,即无法在JIT装饰函数中使用dtype https://github.com/numba/numba/issues/3066
我现在已经在此问题上花费了4-5个小时,但我找不到解决的办法,您可以解析通过xxx函数创建的数组,但是无法在内部使用empty()或zeros()装饰功能