在Numba中创建日期数组?

时间:2018-08-20 21:44:54

标签: python numba

我想在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

2 个答案:

答案 0 :(得分:3)

编辑: 我必须纠正自己,numba支持numpy.empty()datetime64

  

Numba支持以下Numpy标量类型:[...]日期时间和时间戳:任何单位[...]   
来源:Section 2.7.1

  

numpy.empty()(仅前两个参数)   
来源:Section 2.7.3.3

不知道是什么原因导致了您的问题。


您错误地指定了dtype参数。 Numpy不使用numba类。您可以按照以下方法正确指定dtype :(了解更多herehere

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()装饰功能