Operaciones numéricas con vectores - Python y NumPy

Índice

Introducción

Que les parece si hoy hablamos un poco de los vectores, ¿Sí? Bueno, esta bien.

En el día de hoy veremos algunos métodos que nos proporciona la biblioteca NumPy para procesar vectores, y poder hacer operaciones numéricas con ellos.

Si aun no dispones de la librería numpy, puedes descargarla ingresando al siguiente enlace: https://pypi.python.org/pypi/numpy.


En este articulo no pretendo darles una explicación de todos los métodos que nos proporciona NumPy ya que me llevaría muchísimo tiempo y el articulo se alargaría a tal punto en que los lectores se aburrirán, por ende planeo hacer un tipo de serie, subiendo todas las semanas, un articulo referente a numpy.

Python y NumPy

NumPy es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices. (Fuente: Wikipedia).

Si vamos a usar vectores, numpy es la mejor opción. Pero ¿Porque?. En este articulo quisiera mostrarte la diferencia entre las listas python y las matrices de NumPy.

Python y NumPy
 

Como todos sabemos los vectores son una parte muy importante en la matemática, son muy usados en la área de física, y es muy común que en algunos casos debamos sumarlos. Recuerdo muy bien una parte de un libro de física que dice: "La suma de dos vectores es otro vector, llamado vector suma".

Regresando al tema, ¿Porque numpy?, ¿Que hace numpy que python no pueda?.

Tratemos de sumar una lista con otra lista, y veamos el resultado:

 
lista1 = [3, 52, 34, 45]
lista2 = [6, 34, 76, 23]
print(lista1 + lista2)

[3, 52, 34, 45, 6, 34, 76, 23]

Bueno, no hemos visto ningún error ¿Verdad?, hemos declarado 2 listas, luego imprimimos la suma de estas 2 listas. Pero si observamos mejor, no hemos hecho más que concatenar las listas, las hemos unidos. Y eso no es lo que quería, lo que quiero hacer es sumar cada uno de los elementos de la lista1 con cada uno de los elementos de la lista2, y que me de como resultado un vector con cada uno de los resultados.

Y que pasa si intento obtener el producto de estas 2 listas:

lista1 * lista2

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-73-bdc71fc189af> in <module>()
----> 1 lista1 * lista2

TypeError: can't multiply sequence by non-int of type 'list'

Como pueden observar, Python lanza un error, ya que no podemos multiplicar estos tipos de datos.

Para poder realizar operaciones aritméticas con vectores, necesitaremos una herramienta externa, en este caso, NumPy.

Creando nuestro Vector

Comencemos por el principio, antes de hacer operaciones con vectores, debemos declarar nuestros vectores, para ello numpy nos ofrece el método array el cual nos permite crear una matriz con la lista que se le pase como argumento:

import numpy as np
width = [1.65, 1.82, 1.23, 1.56, 1.72, 1.98, 1.65]
np_width = np.array(width)
print(type(np_width))

<class 'numpy.ndarray'>

En el código de arriba, le pido a Python que me muestre el tipo de objeto de mi variable "np_width".

Repasemos un poco lo que ha sucedido, lo primero que hago es importar a numpy como np, luego declaro una lista llamada width, con 7 elemento, seguidamente declaro la variable np_width el cual contiene a mi nuevo objeto, al cual le pasamos como argumento nuestra lista width, al final, muestro el tipo de dato de nuestra variable np_width.

Como podemos observar, np_width, es de tipo "ndarray": el cual representa una matriz multidimensional.

np_width = np.array(width)
print(np_width)

[ 1.65 1.82 1.23 1.56 1.72 1.98 1.65] 

Sobre esta matriz podemos efectuar una gran variedad de métodos, a continuación mencionare algunos:

# max(): Obtener el valor mayor dentro del vector 
np_width.max()

# min(): Obtener el valor menor dentro del vector
np_width.min()

# sort(): ordena los elementos del vector de mayor a menor
np_width.sort()

# round(): Redondea los valores del vector
np_width.round()

# sum(): Nos devuelve la suma de todos los valores del vector
np_width.sum()

# put():Inserta un nuevo elemento en la matriz en la posición especificada
np_width.put(-1, 1.79)

Eso son algunos de los métodos que podemos usar sobre nuestras matrices multidimensionales.

Operaciones numéricas con vectores

Ya que sabemos declarar nuestros vectores y usar métodos sobre ellos, es hora de sumar.

Al momento de sumar dos vectores, lo que sucede es que el elemento del primer vector se suma con el elemento del segundo vector, si tenemos vectores con más de un elemento, los elementos se sumaran con respecto a su posicion, si no me explique bien, para entender mejor veamos una representación proporcionada por nuestros empleados de wikipedia:

Ahora, describamos este procedimiento en python:

np_list1 = np.array([45, 65, 23 ,4 ,34])
np_list2 = np.array([6, 32, 8, 82, 77])

np_sum = np_list1 + np_list2

print(np_sum)

[ 51 97 31 86 111]

Y de esta manera tan sencilla, logramos sumar un vector con otro vector el cual nos da como resultado, un vector con los resultados.

Muy fácil ¿Verdad?, ahora como haríamos para obtener el producto de estos dos vectores, pues simplemente cambiamos el signo + por el signo *.

 
np_product = np_list1 * np_list2

print(np_product)

[ 270 2080 184 328 2618]

Perfecto, el resultado que esperábamos.

Bueno, hasta aquí los acompaño. NumPy es una biblioteca muy extensa y muy potente, es tempo de que vayas y cometas algunos errores, es bueno equivocarnos de vez en cuando, anda y explora la librería, deja volar tu imaginación, y si quieres puedes ir a la documentación de NumPy, te lo recomiendo.

Comparte tu experiencia con nosotros dejando un buen comentario, y dinos si te fue de mucha ayuda este articulo.

En artículos posteriores, escribirá más sobre NumPy, ya que es un modulo muy extenso y vale la pena aprender todo lo que nos provee.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes 😀

  1. Carlos Monzon dice:

    Gracias Luis por el artículo. Aprovechando quiero que me recomiendes una aplicación diseñador de formularios de escritorio para Python, que tenga pueda elaborar menús tipo ribbon. Además de tutoriales al respecto. Gracias de antemano.

    1. Luis Salcedo dice:

      Hola Carlos. Bueno, existen una gran variedad de software que nos permiten diseñar interfaces gráficas con Python, incluso en la biblioteca estándar de Python existe Tkinter, un modulo que nos permite a diseñar interfaces gráficas, de esta manera no necesitaras descargar recursos externos.

      Pero, si estas dispuesto a descargar un software externo, te recomiendo PyQt en su ultima versión (PyQt5), de verdad que vale la peno aprender como funciona este modulo. Tiene muchas funcionalidades. Y si quieres guardar la información del formulario en una base de datos, PyQt tiene un sistema para la comunicación a base de datos basadas en SQL. En Internet existen muchas guías sobre PyQt, pero yo aprendí los principios básicos fue en w3ii.com, una web con una gran cantidad de tutoriales de muchas áreas informáticas en más de 10 idiomas diferentes. Este el el link del tutorial de PyQt: http://www.w3ii.com/es/pyqt/default.html.

      Puedes descargar PyQt desde tu terminal ya se Windows o Linux, o puedes descargar los archivos ingresando al siguiente enlace: https://pypi.python.org/pypi/PyQt5/5.9.1

      Espero haberte ayudado, cualquier otra cosa, escríbeme.

  2. Anónimo dice:

    Muchas gracias, que temas tan interesantes!. Saludos

    1. Luis Salcedo dice:

      Gracias a ti por visitar el blog y compartir tu opinión. Saludos 😀

  3. Unknown dice:

    Por ejemplo si quiero hacer un programa con base en la siguiente situación:
    El sistema meteorológico Mexicano desea conocer las temperaturas de los estados de la república, el promedio y la sumatoria de las mismas. (Utilizando arreglos pedir las temperaturas) como sería?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey