首页 > 解决方案 > 在 Numba 中创建日期数组?

问题描述

我想在 Numba 函数中创建一个日期数组,以 nopython 模式运行。

我看不到日期类型,所以我正在尝试 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

标签: pythonnumba

解决方案


编辑: 我必须纠正自己,numpy.empty()并且datetime64都得到 numba 的支持:

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

numpy.empty()(只有 2 个第一个参数)
来源:第 2.7.3.3 节

不知道是什么导致了你的问题。


您错误地指定了dtype参数。Numpy 不使用 numba 类。以下是dtype正确指定的方法:(在此处此处阅读更多信息)

dtype="datetime64[D]"

但即使你以这种方式指定参数,它也不起作用。的nopython参数@nb.jit()本身并不支持该类型。这是更正的代码:(在这里阅读更多)

import numba as nb
import numpy as np

@nb.jit
def xxx():
  return np.empty(10, dtype="datetime64[D]")

print(xxx())

但是考虑给 numba 一个类型提示:

import numba as nb
import numpy as np

@nb.jit(nb.types.NPDatetime('D')()) # returns datatime, no arguments
def xxx():
  return np.empty(10, dtype="datetime64[D]")

print(xxx())

推荐阅读