无法找出如何将 datetime dtype 指定为 Numba @guvectorize
Unable to find out how to specify datetime dtype to Numba @guvectorize
我想在 Numba 中处理日期时间值数组。
我在一个小例子上尝试过,但我无法让它工作。
import numba as nb
from numba import guvectorize
@guvectorize('void(nb.types.NPDatetime("ns")[:],nb.types.NPDatetime("ns")[:])',
'(m)->(m)')
def ts_copy(ts, ts_c):
for idx, t in np.ndenumerate(ts):
idx, = idx
ts_c[idx] = t
ts = pd.date_range(start='2021/1/1 08:00', end='2021/1/1 18:00', freq='1H').to_numpy()
ts_c = np.empty(ts.size, dtype='datetime64[ns]')
res = ts_copy(ts, ts_c)
我收到以下错误消息:
Traceback (most recent call last):
File "<ipython-input-39-1550d3aa0145>", line 3, in <module>
def ts_copy(ts, ts_c):
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/decorators.py", line 179, in wrap
guvec.add(fty)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 212, in add
cres, args, return_type = _compile_element_wise_function(
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 144, in _compile_element_wise_function
cres = nb_func.compile(sig, **targetoptions)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 93, in compile
return self._compile_core(sig, flags, locals)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 124, in _compile_core
args, return_type = sigutils.normalize_signature(sig)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/core/sigutils.py", line 24, in normalize_signature
parsed = _parse_signature_string(sig)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/core/sigutils.py", line 14, in _parse_signature_string
return eval(signature_str, {}, types.__dict__)
File "<string>", line 1, in <module>
NameError: name 'nb' is not defined
拜托,有什么想法吗?
非常感谢你的帮助。
最佳,
guvectorize
不适用于日期时间类型。转换为浮点时间戳。
import numba as nb
from numba import guvectorize
import numpy as np
import pandas as pd
import arrow
@guvectorize([(nb.types.float64[:],nb.types.float64[:])],'(m)->(m)')
def ts_copy(ts, ts_c):
for idx, t in np.ndenumerate(ts):
idx, = idx
ts_c[idx] = t
ts = pd.date_range(start='2021/1/1 08:00', end='2021/1/1 18:00', freq='1H').to_numpy()
ts_c = np.empty(ts.size, dtype='datetime64[ns]')
def e(_list):
return np.array([arrow.get(str(_)).float_timestamp for _ in _list])
ts = e(ts)
ts_c = e(ts_c)
res = ts_copy(ts, ts_c)
for each in res:
print(arrow.get(each))
我想在 Numba 中处理日期时间值数组。 我在一个小例子上尝试过,但我无法让它工作。
import numba as nb
from numba import guvectorize
@guvectorize('void(nb.types.NPDatetime("ns")[:],nb.types.NPDatetime("ns")[:])',
'(m)->(m)')
def ts_copy(ts, ts_c):
for idx, t in np.ndenumerate(ts):
idx, = idx
ts_c[idx] = t
ts = pd.date_range(start='2021/1/1 08:00', end='2021/1/1 18:00', freq='1H').to_numpy()
ts_c = np.empty(ts.size, dtype='datetime64[ns]')
res = ts_copy(ts, ts_c)
我收到以下错误消息:
Traceback (most recent call last):
File "<ipython-input-39-1550d3aa0145>", line 3, in <module>
def ts_copy(ts, ts_c):
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/decorators.py", line 179, in wrap
guvec.add(fty)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 212, in add
cres, args, return_type = _compile_element_wise_function(
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 144, in _compile_element_wise_function
cres = nb_func.compile(sig, **targetoptions)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 93, in compile
return self._compile_core(sig, flags, locals)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/np/ufunc/ufuncbuilder.py", line 124, in _compile_core
args, return_type = sigutils.normalize_signature(sig)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/core/sigutils.py", line 24, in normalize_signature
parsed = _parse_signature_string(sig)
File "/home/pierre/anaconda3/lib/python3.8/site-packages/numba/core/sigutils.py", line 14, in _parse_signature_string
return eval(signature_str, {}, types.__dict__)
File "<string>", line 1, in <module>
NameError: name 'nb' is not defined
拜托,有什么想法吗? 非常感谢你的帮助。 最佳,
guvectorize
不适用于日期时间类型。转换为浮点时间戳。
import numba as nb
from numba import guvectorize
import numpy as np
import pandas as pd
import arrow
@guvectorize([(nb.types.float64[:],nb.types.float64[:])],'(m)->(m)')
def ts_copy(ts, ts_c):
for idx, t in np.ndenumerate(ts):
idx, = idx
ts_c[idx] = t
ts = pd.date_range(start='2021/1/1 08:00', end='2021/1/1 18:00', freq='1H').to_numpy()
ts_c = np.empty(ts.size, dtype='datetime64[ns]')
def e(_list):
return np.array([arrow.get(str(_)).float_timestamp for _ in _list])
ts = e(ts)
ts_c = e(ts_c)
res = ts_copy(ts, ts_c)
for each in res:
print(arrow.get(each))