在Numba创建日期数组?

问题描述 投票:2回答:2

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

python numba
2个回答
3
投票

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

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

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

不知道是什么原因造成你的问题


您已错误地指定了dtype参数。 Numpy没有使用numba类。以下是正确指定dtype的方法:(阅读更多herehere

dtype="datetime64[D]"

但即使你以这种方式指定了论证,它也行不通。 nopython@nb.jit()的论证本身并不支持这种类型。这是更正后的代码:(阅读更多here

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())

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())

让我知道这个是否奏效!

Edit:

正如评论中所述,我的代码是在没有及时装饰器的情况下执行的,未来的研究似乎有一个错误,其中dtype不能在JIT装饰函数中使用https://github.com/numba/numba/issues/3066

我现在花了4-5个小时解决这个问题,我找不到解决方法,你可以解析通过xxx函数创建的数组,但你不能在装饰函数中使用empty()或zeros()

© www.soinside.com 2019 - 2024. All rights reserved.