Я хочу передать массив datetime функции Numba (которая не может быть векторизована и в противном случае будет очень медленной). Насколько я понимаю, Numba поддерживает numpy.datetime64. Однако кажется, что он поддерживает datetime64 [D] (точность дня), но не datetime64 [ns] (точность до миллисекунды) (я усвоил это на собственном горьком опыте: документировано ли это?).
Я пытался преобразовать datetime64 [ns] в datetime64 [D], но не нашел способа! Любые идеи?
Я резюмировал свою проблему с помощью минимального кода ниже. Если вы запустите testdf(mydates)
, то есть datetime64 [D], он будет работать нормально. Если вы запустите testdf(dates_input)
, то есть datetime64 [ns], этого не произойдет. Обратите внимание, что в этом примере даты просто передаются функции Numba, которая (пока) ничего с ними не делает. Я пытаюсь преобразовать date_input в datetime64 [D], но преобразование не работает. В моем исходном коде я читал из таблицы SQL в фреймворк pandas, и мне нужен столбец, который изменяет день каждой даты на 15-е.
import numba
import numpy as np
import pandas as pd
import datetime
mydates =np.array(['2010-01-01','2011-01-02']).astype('datetime64[D]')
df=pd.DataFrame()
df["rawdate"]=mydates
df["month_15"] = df["rawdate"].apply(lambda r: datetime.date( r.year, r.month,15 ) )
dates_input = df["month_15"].astype('datetime64[D]')
print dates_input.dtype # Why datetime64[ns] and not datetime64[D] ??
@numba.jit(nopython=True)
def testf(dates):
return 1
print testf(mydates)
Ошибка, которую я получаю, если запускаю testdf(dates_input)
:
numba.typeinfer.TypingError: Failed at nopython (nopython frontend)
Var 'dates' unified to object: dates := {pyobject}
np.busday_count
для данных pandas, которые читаются:TypeError: Iterator operand 0 dtype could not be cast from dtype('<M8[ns]') to dtype('<M8[D]') according to the rule 'safe'
- person Michael K   schedule 28.03.2016