Software y Programación

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).

NumPy
NumPy

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

Sergio Alves

Ingeniero de Sistemas. MSc. en Data Science. Cuento con una amplia trayectoria profesional en las áreas de Desarrollo Web FullStack, DBA, DevOps, Inteligencia Artificial y Ciencia de Datos. Soy un entusiasta de la música, la tecnología y el aprendizaje contínuo.

Artículos Relacionados

Deja un comentario

Back to top button