Estoy luchando con un error de numba Untyped global name 'is_a_subset': Cannot determine Numba type of <class 'numba.np.ufunc.gufunc.GUFunc'> Esto generalmente significa que he buscado y usado un método que no es compatible con numba El siguiente código falla.
@guvectorize("(n),(n)->(n)",nopython=True) def is_a_subset(x,y,out): out[:]=np.array([item in x for item in y]) @njit() def test(x,y,z): is_a_subset(x,y,z) return z.mean() x=np.array([[1,2,3],[3,2,1]]) y=np.array([[3,6,1],[1,2,3]]) z = np.empty_like(x) test(x,y,z)Sin embargo, eliminar njit en la función de prueba hace que todo funcione.
def test(x,y,z): is_a_subset(x,y,z) return z.mean() ¿Por qué numba tiene problemas para resolver tipos cuando está en modo sin Python?
También lo había intentado sin resultados diferentes.
@guvectorize(["f8[:],f8[:],f8[:]"],"(n),(n)->(n)",nopython=True) def is_a_subset(x,y,out): out[:]=np.array([item in x for item in y])Estoy usando Numba 0.53.1 y puedo replicar este error. Este blog sobre la actualización de despacho dinámico para guvectorize en Numba 0.53 menciona esto al final (énfasis agregado):
En el futuro, nos gustaría acercar las capacidades de
@guvectorizea las de@vectorize. Por ejemplo, actualmente no es posible llamar a una función guvectorize desde una función jitted (@jit).
Hay un problema abierto similar con vectorize , pero demuestra que las funciones @vectorize se pueden llamar en las funciones @jit , solo que están restringidas al target = "cpu" .