Libro Python Aplicado de Eugenia Bahit. GNU/Linux, ciencia de datos, y desarrollo web

Banner de Python Aplicado

Matemáticas nativas


Cita con formato IEEE:
E. Bahit, "Matemáticas nativas", in Python Aplicado, 4th ed., EBRC Publisher, 2022, pp. 189-207.

Cita con formato APA 7:
Bahit, E. (2022). Matemáticas nativas. In Python Aplicado (4th ed., pp. 189-207). EBRC Publisher.

Cita en línea:
(Bahit, 2022)

La biblioteca estándar de Python ofrece siete módulos para dar soporte a operaciones numéricas, estadísticas, y matemáticas en general. Estos módulos se describen en la siguiente tabla.

Módulos matemáticos y estadísticos de la biblioteca estándar de Python
Módulo Función
numbers Se trata de un módulo que define pseudoclases abstractas para tipos numéricos, pero que no están destinados a ser instanciados, sino heredados12. La jerarquía de tipos definidos es la siguiente:
Tipos numéricos definidos en el módulo math
Clase Propiedades
Complex real, imag
Real --
Rational numerator, denominator
Integral --
math El módulo math provee un acceso directo a funciones matemáticas generales definidas en el estándar del lenguaje C. Algunas de sus funciones se describen a continuación. La documentación completa se encuentra disponible en https://docs.python.org/es/3/library/math.html
cmath Similar a math pero con soporte para números complejos.
decimal Es una alternativa al tipo float que ofrece mayor precisión en el cómputo aritmético y redondeo de números de coma flotante.
fractions Módulo para realizar operaciones de cómputo con números racionales.
random Módulo para generación de números pseudoaleatorios criptográficamente inseguros.
statistic Funciones estadísticas.

El módulo math

Algunas de las funciones destacadas de este módulo son las funciones comb (combinatoria), factorial, perm (permutaciones), gcd (máximo común divisor), prod (producto), log (logaritmo), pow (potencia), sqrt (raíz cuadrada), sin, cos, y tan (seno, coseno, y tangente, respectivamente). También retorna algunas constantes como pi y e (número de Euler).

Combinaciones, factoriales y permutaciones

La teoría combinatoria formula las bases necesarias para poder realizar cuentas en situaciones complejas que no se resuelven con una simple suma.

Una combinación es cualquier selección de parte o de todos los objetos simultáneamente, a partir de un número de objetos dados.

Por ejemplo, ¿cuántas posibles combinaciones de dos letras existen a partir de las letras de la palabra hola? Se pueden combinar: ho, hl, ha, ol, oa, y la. Es decir, que para un total de 4 letras, tomadas de a 2 letras por vez, existe un total de 6 posibles combinaciones.

El número de combinaciones posibles para n objetos diferentes, seleccionando r objetos por vez, para r \le n está determinado por:

^{n}C_{r} = {n! \over {r!(n-1)!}}

Donde:

n! se denomina n factorial o factorial de n y se obtiene multiplicando todos los enteros positivos de n hasta el 1. Así, para n=7, n!=7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1 (en la práctica, se prescinde de la multiplicación por 1).

Dado que entre 0 y 1 el único entero positivo es 1, el factorial de 0 es 1, tal que 0! = 1.

^{n}C_{r} Se lee como combinaciones de n tomadas de r en r. También se denota con el binomio {n \choose r}.

Así, retomando el ejemplo de combinaciones de letras de la palabra hola tomadas de a 2 por vez, las 6 combinaciones posibles se obtendrían a partir de:

^{4}C_{2} = {4! \over {2!(4-2)!}}= {{4 \times 3 \times 2 \times 1} \over {2 \times 1 (4-2)!}} = {24 \over 2 \times 1 \times 2 \times 1} = {24 \over 4} = 6

La función math.comb(n, r) disponible desde Python 3.8, retorna el número de combinaciones posibles para n elementos tomados de r elementos por vez, sin necesidad de tener que recurrir al factorial:

>>> from math import comb
>>> comb(4, 2)
6

Sin embargo, en versiones anteriores, sí será necesario recurrir al cálculo factorial, que podrá hacerse mediante la función math.factorial(x) donde x es el número a factorizar:

>>> from math import factorial
>>> n = 4
>>> r = 2
>>> factorial(n)
24
>>> c = factorial(n) / (factorial(r) * factorial(n-r))
>>> c
6.0

En una combinación, el orden de los elementos es indistinto. Cuando el orden—y no la combinación— es importante, se aplican las leyes de la...