将numpy datetime64转换为numba jitclass下的unix时间戳
为了让代码更容易阅读,我想在一个 numba 的 jitclass 中使用 numpy.datetime64 对象,并希望在这个类内部把它转换成浮点格式的 unix 时间戳。
目前,我只能在创建 jitclass 对象之前先计算好 unix 时间戳,然后把这个时间戳作为参数传进去,比如:
>>> import numpy as np
>>> (np.datetime64('2024-01-01T00:00:00') - np.datetime64('1970-01-01T00:00:00')) / np.timedelta64(1, 's')
1704067200.0
假设我创建了一个接收 numpy datetime 作为参数的 jitclass,我该如何在这个类里面创建一个方法,把 datetime 转换成 unix 时间戳呢?最终的目标是,在创建 jitclass 对象时提供一个开始和结束日期,然后把它们转换成 unix 时间戳,以便使用 np.arange()
创建一个时间戳数组。
import numpy as np
from numba.experimental import jitclass
from numba import types
spec=[
('start', types.NPDatetime('s'))
]
@jitclass(spec)
class Foo():
def __init__(self, start):
self.start = start
obj = Foo(np.datetime64('2024-01-01T00:00:00'))
>>> obj.start
numpy.datetime64('2024-01-01T00:00:00')
1 个回答
1
如果我理解得没错,你想在Foo
这个类里创建一个类似于to_timestamp()
的方法:
import numba as nb
import numpy as np
spec = [("start", nb.types.NPDatetime("s"))]
_unix_timestamp_begin = np.datetime64("1970-01-01T00:00:00")
_one_second = np.timedelta64(1, "s")
@nb.experimental.jitclass(spec)
class Foo:
def __init__(self, start):
self.start = start
def to_timestamp(self):
return (self.start - _unix_timestamp_begin) / _one_second
obj = Foo(np.datetime64("2024-01-01T00:00:00"))
print(obj.to_timestamp())
输出结果是:
1704067200.0