La función vectorize

Una función extremadamente útil es la función numpy.vectorize. Permite crear una función vectorizada a partir de una que no lo es, lo que nos permite aplicar esta última a un array.

Pongamos un ejemplo sencillo. Imaginemos una función que acepta un número y devuelve True o False si el número es o no par:

def is_even_single(m):
    if m%2 == 0:
        return True
    else:
        return False

Probemos la función con un par de valores:

is_even_single(1)

False

is_even_single(4)

True

Esta función acepta un escalar, por lo que intentar usarla con un array NumPy devolverá un error. Pero podemos "vectorizarla" con la función np.vectorize:

is_even = np.vectorize(is_even_single)

Ahora ya es posible usarla con arrays:

m = np.array([1, 2, 3, 4, 5])
is_even(m)

array([False, True, False, True, False])

Un aspecto importante es el rendimiento de esta función: tal y como se indica en la documentación, esta función se ofrece por comodidad, no por rendimiento, pues básicamente se trata de un bucle for. Es por ello que no debemos esperar resultados equivalentes a los de las funciones universales vistas.