5 Funciones de NumPy que deberías conocer
NumPy es una extensión de código abierto para Python que nos permite utilizar vectores y matrices. También podemos utilizarla para trabajar en el dominio del álgebra lineal y las transformadas de Fourier.
Utilizando esta librería podemos obtener resultados más rápidos que los obtenidos con las listas tradicionales de Python. Esto sucede debido a su referencia de localidad (los datos se almacenan en un lugar continuo de la memoria).
Funciones en Numpy
En este artículo repasaremos cinco funciones útiles de NumPy.
- array
- transpose
- reshape
- sin
- around
La forma recomendada de ejecutar este cuaderno es hacer clic en el botón «Ejecutar» en la parte superior de esta página y seleccionar «Ejecutar en Binder». Esto ejecutará el cuaderno en mybinder.org, un servicio en línea gratuito para ejecutar cuadernos Jupyter.
Comencemos importando Numpy y listando las funciones cubiertas en este cuaderno.
In [ ]:
import numpy as np
In [ ]:
# Lista de funciones
function1 = np.array
function2 = np.transpose
function3 = np.reshape
Función 1 – np.array de NumPy
Usamos esta función cuando queremos crear un array NumPy.
In [ ]:
np.array([5, 8, 4])
Out[ ]:
dtype('int64')
Aquí, creamos un array NumPy de 1 dimensión. Maneja elementos de tipo de datos entero por defecto.
In [ ]:
np.array([6, 7, 9.0])
Out[ ]:
dtype('float64')
Aquí, creamos un array NumPy de 1 dimensión. Maneja elementos de tipo de datos float por defecto.
In [ ]:
np.array([2, 3, 'five'], dtype=int)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-27-247950377178> in <module>() 1 # Example 3 - breaking (to illustrate when it breaks) ----> 2 np.array([2, 3, 'five', True], dtype=int) ValueError: invalid literal for int() with base 10: 'five'
Con el atributo dtype, podemos establecer el tipo de datos por defecto. Si utilizamos este parámetro con un conjunto de elementos incompatible, obtendremos este error.
Esta función es muy útil cuando queremos convertir una variable tipo array en un Array NumPy para poder aplicar cualquiera de las numerosas funciones NumPy.
Function 2 – np.transpose de NumPy
Esta función devuelve la transposición de una matriz. La transposición invierte una matriz sobre su diagonal; es decir, cambia los índices de fila y columna de la matriz.
In [ ]:
x = np.array([[3, 2, 9], [5, 7, 1]])
np.transpose(x)
Out[ ]:
array([[3, 5], [2, 7], [9, 1]])
Aquí, tenemos la transposición de la matriz original de 2 x 3, que es una matriz de 3 x 2.
In [ ]:
x = np.array([[[3, 2], [5, 7], [4, 6]]])
print('shape from original vector: {}'.format(x.shape))
x = np.transpose(x, (1, 2, 0)).shape
print('shape from transposed vector: {}'.format(x))
shape from original vector: (1, 3, 2) shape from transposed vector: (3, 2, 1)
Utilizando el segundo argumento (ejes), puede permutar los ejes según un orden determinado.
In [ ]:
x = np.array([[[3, 2], [5, 7], [4, 6]]])
print('shape from original vector: {}'.format(x.shape))
x = np.transpose(x, (1, 2, 0, 3)).shape
print('shape from transposed vector: {}'.format(x))
shape from original vector: (1, 3, 2)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-80-a29ce43c8b93> in <module>() 3 print('shape from original vector: {}'.format(x.shape)) 4 ----> 5 x = np.transpose(x, (1, 2, 0, 3)).shape 6 print('shape from transposed vector: {}'.format(x)) <__array_function__ internals> in transpose(*args, **kwargs) /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in transpose(a, axes) 649 650 """ --> 651 return _wrapfunc(a, 'transpose', axes) 652 653 /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds) 59 60 try: ---> 61 return bound(*args, **kwds) 62 except TypeError: 63 # A TypeError occurs if the object does have such a method in its ValueError: axes don't match array
Cuando se utiliza el segundo argumento, hay que asegurarse de utilizar el número correcto de ejes, de lo contrario, se bloqueará.
Puedes utilizar esta función cuando quieras obtener la transposición de un array (por ejemplo, cuando trabajes con regresión lineal).
Function 3 – np.reshape
Esta función es útil cuando se desea cambiar la forma de una matriz sin modificar su contenido.
In [ ]:
a = np.array([[1,2,3], [4,5,6]])
np.reshape(a, 6)
Out[ ]:
array([1, 2, 3, 4, 5, 6])
Aquí, hemos remodelado la matriz a una matriz de 1 dimensión de longitud 6.
In [ ]:
a = np.array([[1,2,3], [4,5,6]])
np.reshape(a, 6, order='F')
Out[ ]:
array([1, 4, 2, 5, 3, 6])
Utilizando el parámetro ‘order’, podemos colocar los elementos en el array remodelado utilizando este orden de índice. F’ significa leer/escribir los elementos usando un orden de índice tipo Fortran, con el primer índice cambiando más rápido, y el último índice cambiando más lento.
In [ ]:
a = np.array([[1,2,3], [4,5,6]])
np.reshape(a, 6, order='G')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
60 try:
---> 61 return bound(*args, **kwds)
62 except TypeError:
TypeError: order not understood
Durante la gestión de la excepción anterior, se produjo otra excepción:
TypeError Traceback (most recent call last)
<ipython-input-86-75032211811f> in <module>()
1 # Example 3 - breaking (to illustrate when it breaks)
2 a = np.array([[1,2,3], [4,5,6]])
----> 3 np.reshape(a, 6, order='G')
<__array_function__ internals> in reshape(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in reshape(a, newshape, order)
299 [5, 6]])
300 """
--> 301 return _wrapfunc(a, 'reshape', newshape, order=order)
302
303
/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds)
68 # Call _wrapit from within the except clause to ensure a potential
69 # exception has a traceback chain.
---> 70 return _wrapit(obj, method, *args, **kwds)
71
72
/usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapit(obj, method, *args, **kwds)
45 except AttributeError:
46 wrap = None
---> 47 result = getattr(asarray(obj), method)(*args, **kwds)
48 if wrap:
49 if not isinstance(result, mu.ndarray):
TypeError: order not understood
Cuando utilices el parámetro orden, asegúrate de poner un argumento válido (‘C’, ‘F’ o ‘A’).
En este caso, usamos un valor inválido ‘G’, por eso se bloqueó.
Puedes usar esta función cuando quieras remodelar un array para hacerlo compatible con otros arrays para operaciones aritméticas.
Función 4 – np.sin de NumPy
Esta función implementa el seno trigonométrico
In [ ]:
np.sin(np.pi/2.)
Out[ ]:
1.0
Aquí, imprimimos el seno de un ángulo.
In [ ]:
np.sin(np.array((0., 30., 45., 60., 90.)) * np.pi / 180. )
Out[ ]:
array([0. , 0.5 , 0.70710678, 0.8660254 , 1. ])
Aquí imprimimos los senos de una serie de ángulos dados en grados
In [ ]:
np.sin('5')
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-99-c44e3e8155a6> in <module>() 1 # Example 3 - breaking (to illustrate when it breaks) ----> 2 np.sin('5') TypeError: ufunc 'sin' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
En este caso, estamos obteniendo un error debido al tipo de datos del argumento. Utilice siempre valores numéricos.
El seno es una de las funciones fundamentales de la trigonometría, por lo que puede que necesites utilizar esta función a menudo.
Función 5 – np.around de NumPy
Con esta función, puede redondear uniformemente al número de decimales dado.
In [ ]:
np.around([0.37, 1.64])
Out[ ]:
array([0., 2.])
Por defecto, redondea a 0 decimales.
In [ ]:
np.around([0.37, 1.64], decimals=1)
Out[ ]:
array([0.4, 1.6])
Aquí, redondeamos los valores a 1 decimal.
In [ ]:
np.around([0.37, '1.64'])
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-105-43ffcc5bec25> in <module>() 1 # Example 3 - breaking (to illustrate when it breaks) ----> 2 np.around([0.37, '1.64']) <__array_function__ internals> in around(*args, **kwargs) /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in around(a, decimals, out) 3222 3223 """ -> 3224 return _wrapfunc(a, 'round', decimals=decimals, out=out) 3225 3226 /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds) 56 bound = getattr(obj, method, None) 57 if bound is None: ---> 58 return _wrapit(obj, method, *args, **kwds) 59 60 try: /usr/local/lib/python3.6/dist-packages/numpy/core/fromnumeric.py in _wrapit(obj, method, *args, **kwds) 45 except AttributeError: 46 wrap = None ---> 47 result = getattr(asarray(obj), method)(*args, **kwds) 48 if wrap: 49 if not isinstance(result, mu.ndarray): TypeError: ufunc 'rint' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Asegúrese siempre de utilizar números en lugar de cadenas, de lo contrario se bloqueará.
Esta función es útil cuando estamos utilizando una gran cantidad de datos y queremos simplificarlos reduciendo el número de decimales.
Conclusión
Como puedes ver en este breve artículo, NumPy tiene muchas funcionalidades que te ayudan a manejar arrays. Hay muchas más funcionalidades que puedes revisar en la documentación oficial de NumPy.
Referencias
- Numpy official tutorial : https://numpy.org/doc/stable/user/quickstart.html
- Numpy Tutorial — The Basics : https://medium.com/@lucyji/numpy-tutorial-the-basics-3ecd2717b855
- Why Should We Use NumPy? : https://medium.com/fintechexplained/why-should-we-use-numpy-c14a4fb03ee9