Exemple de code avec un NumPy ufunc:numba.vectorize ufunc ne supporte pas 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))
Ces deux donnent le même résultat:
array([ True, False, False], dtype=bool)
Maintenant, je veux faire quelque chose de similaire avec Numba:
import numba
@numba.vectorize(nopython=True)
def myless(a, b):
return a < b
myless(nums, 2)
myless(times, np.timedelta64(2)) # fails
la première donne le résultat correct, mais la seconde échoue:
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''
Qu'est-ce qui ne va pas? Comment puis-je le réparer?
Ouais, mais qui le rend maladroit sur le site d'appel. Pas bon, parce que les enveloppes pour ufuncs enlèvent toute la magie d'ufunc. Vous ne pouvez pas vraiment cacher le hack n'importe où aussi loin que je peux dire. De plus, vous aurez toujours besoin d'une copie si les unités diffèrent (par exemple en comparant les secondes avec des nanosecondes). –