Introducción a las Funciones Universales de NumPy

PythonPythonBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos los conceptos básicos de las Funciones Universales de NumPy (ufuncs). Las ufuncs son funciones que operan sobre ndarrays de manera elemento a elemento, admitiendo la difusión de arrays, el casteo de tipos y otras características estándar. Aprenderemos sobre los diferentes métodos de las ufuncs, las reglas de difusión, las reglas de casteo de tipos y cómo anular el comportamiento de las ufuncs.

Nota: Puedes escribir código en 08-universal-functions.ipynb. Algunas operaciones de impresión se omiten en los pasos, y puedes imprimir la salida según sea necesario.

Operaciones aritméticas básicas

Las ufuncs básicas operan sobre escalares, y el ejemplo más simple es el operador de suma. Veamos cómo podemos usar el operador de suma para sumar dos arrays elemento a elemento.

import numpy as np

## Crea dos arrays
arr1 = np.array([0, 2, 3, 4])
arr2 = np.array([1, 1, -1, 2])

## Suma los arrays elemento a elemento
result = arr1 + arr2

## Imprime el resultado
print(result)

Salida:

array([1, 3, 2, 6])

Métodos de ufunc

Las ufuncs tienen cuatro métodos: reduce, accumulate, reduceat y outer. Estos métodos son útiles para realizar operaciones en arrays. Echemos un vistazo al método reduce.

import numpy as np

## Crea un array
arr = np.arange(9).reshape(3, 3)

## Reduce el array a lo largo del primer eje
result = np.add.reduce(arr, 1)

## Imprime el resultado
print(result)

Salida:

array([ 3, 12, 21])

Determinación del tipo de salida

La salida de una ufunc no necesariamente es un ndarray si no todos los argumentos de entrada son ndarrays. El tipo de salida se puede determinar en función de los tipos de entrada y las reglas de casteo de tipos. Echemos un ejemplo.

import numpy as np

## Crea un array
arr = np.arange(9).reshape(3, 3)

## Realiza la multiplicación y especifica el tipo de salida
result = np.multiply.reduce(arr, dtype=float)

## Imprime el resultado
print(result)

Salida:

array([ 0., 28., 80.])

Difusión (Broadcasting)

La difusión es una característica poderosa de las ufuncs que permite realizar operaciones en arrays con diferentes formas. Las reglas de difusión determinan cómo se tratan los arrays con diferentes formas durante las operaciones. Echemos un ejemplo.

import numpy as np

## Crea dos arrays
arr1 = np.array([1, 2, 3])
arr2 = np.array([[1], [2], [3]])

## Multiplica los arrays
result = arr1 * arr2

## Imprime el resultado
print(result)

Salida:

array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

Reglas de conversión de tipos

La conversión de tipos se realiza en las entradas de una ufunc cuando no hay una implementación de bucle principal para los tipos de entrada proporcionados. Las reglas de conversión determinan cuándo un tipo de datos se puede convertir con seguridad a otro tipo de datos. Echemos un ejemplo.

import numpy as np

## Comprueba si int se puede convertir con seguridad a float
result = np.can_cast(np.int, np.float)

## Imprime el resultado
print(result)

Salida:

True

Sobreescribir el comportamiento de las ufunc

Las clases, incluyendo las subclases de ndarray, pueden sobrescribir cómo las ufunc actúan sobre ellas definiendo ciertos métodos especiales. Esto permite la personalización del comportamiento de las ufunc. Echemos un ejemplo.

import numpy as np

## Define una clase personalizada
class MyArray(np.ndarray):
    def __add__(self, other):
        print("Custom add method called")
        return super().__add__(other)

## Crea una instancia de la clase personalizada
arr = MyArray([1, 2, 3])

## Realiza una adición
result = arr + 1

## Imprime el resultado
print(result)

Salida:

Custom add method called
[2 3 4]

Resumen

En este laboratorio, aprendimos los conceptos básicos de las Funciones Universales de NumPy (ufuncs). Exploramos los diferentes métodos de las ufuncs, las reglas de difusión, las reglas de conversión de tipos y cómo sobrescribir el comportamiento de las ufuncs. Las ufuncs son una herramienta poderosa para realizar operaciones elemento a elemento en arrays de manera eficiente.