Beispielcode mit einem NumPy ufunc unterstützt:numba.vectorize ufunc nicht timedelta64
import numpy as np
nums = np.array([1, 2, 3])
times = nums.astype('timedelta64[ns]')
np.less(nums, 2)
np.less(nums, np.timedelta64(2))
Beide denen das gleiche Ergebnis:
array([ True, False, False], dtype=bool)
Jetzt möchte ich etwas ähnliches mit Numba tun:
import numba
@numba.vectorize(nopython=True)
def myless(a, b):
return a < b
myless(nums, 2)
myless(times, np.timedelta64(2)) # fails
die erste gibt das korrekte Ergebnis, aber die zweite nicht:
TypeError: ufunc 'myless' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Was ist los? Wie kann ich es reparieren?
Ja, aber, dass es an der Aufrufstelle umständlich macht. Nicht gut, weil Wrapper für Ufuncs all die Magie von Ufunc entfernen. Sie können den Hack nicht wirklich verstecken, soweit ich das beurteilen kann. Außerdem benötigen Sie immer noch eine Kopie, wenn sich die Einheiten unterscheiden (z. B. Sekunden mit Nanosekunden vergleichen). –