Voglio passare un array datetime a una funzione Numba (che non può essere vettorizzata e sarebbe altrimenti molto lenta). Capisco che Numba supporta numpy.datetime64. Tuttavia, sembra supportare datetime64 [D] (precisione del giorno) ma non datetime64 [ns] (precisione millisecondo) (l'ho imparato nel modo più duro: è documentato?).Numpy Python: impossibile convertire datetime64 [ns] in datetime64 [D] (da utilizzare con Numba)
Ho provato a convertire da datetime64 [ns] a datetime64 [D], ma non riesco a trovare un modo! Qualche idea?
Ho riassunto il mio problema con il codice minimo qui sotto. Se si esegue testdf(mydates)
, che è datetime64 [D], funziona correttamente. Se si esegue testdf(dates_input)
, che è datetime64 [ns], non è così. Nota che questo esempio passa semplicemente le date alla funzione Numba, che non (ancora) fa qualcosa con loro. Provo a convertire date_input a datetime64 [D], ma la conversione non funziona. Nel mio codice originale ho letto da una tabella SQL in un dataframe panda e ho bisogno di una colonna che cambi il giorno di ogni data al 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)
L'errore che ottengo se corro testdf(dates_input)
è:
numba.typeinfer.TypingError: Failed at nopython (nopython frontend)
Var 'dates' unified to object: dates := {pyobject}
Questa è una domanda davvero utile, ma per qualche motivo è stato molto difficile trovare solo attraverso la ricerca. Ho ricevuto un errore simile durante il tentativo di utilizzare 'np.busday_count' su dati panda, che diceva:' TypeError: Iterator operando 0 dtype non può essere lanciato da dtype ('