Este libro está pensado para quienes trabajan en investigación, docencia o desarrollo tecnológico, y busca acercar Python al mundo científico. A lo largo de estas páginas encontrarán un recorrido que va desde lo básico del lenguaje hasta aplicaciones concretas, mostrando cómo Python puede ser mucho más que un lenguaje de programación: una herramienta versátil para resolver problemas reales.
Cuando la Comunidad Científica notó que las computadoras podían facilitar su trabajo, sus integrantes se convirtieron posiblemente en los adoptantes tempranos más entusiastas de la tecnología. Aunque el uso y la potencia de las computadoras crece continuamente en el ámbito científico, poco se ha avanzado en la formación y desarrollo de habilidades en Desarrollo de Software.
El cálculo científico requiere realizar combinaciones de múltiples tareas de diversa clase. Por ejemplo, es necesario registrar automáticamente datos de un experimento y visualizarlos, realizar cálculos numéricos o simbólicos, ordenar, clasificar, simular, etc. Muchas veces podemos utilizar paquetes de software que realizan esas tareas por nosotros, pero muchas otras ocurre que nadie ha implementado un determinado cómputo en la forma que necesitamos, o simplemente queremos probar ideas nuevas. Cualquiera sea la naturaleza de nuestra actividad en la ciencia o en la tecnología, no resulta infrecuente la necesidad de interactuar con computadoras a través de programas propios.
El uso de Python en aplicaciones científicas ha aumentado sostenidamente en los últimos años, sin embargo es difícil encontrar libros o manuales en castellano de Python que no estén pensados para programadores.
Este libro nace con la idea primaria de acercar Python al mundo científico, en un libro pensado para quienes se desempeñan en el ámbito científico o tecnológico, a partir de nuestra experiencia en el dictado del curso "Herramientas Computacionales para Científicos", que ofrecemos en la Universidad Nacional de La Plata y en la Universidad Tecnológica Nacional desde 2007. De la misma manera, la elección del castellano como idioma de escritura es un factor crítico, porque aunque sabemos que el inglés es una herramienta fundamental tanto para programar como para hacer ciencia, estamos convencidos que no debería ser una barrera de entrada.
Más allá de las secciones básicas de un libro (índice, bibliografía, etc.), el libro tiene tres grandes partes. Sin entrar en el detalle de cómo leer este libro, la primera parte habla de Python, tanto de forma introductoria como también sobre otros temas que son fundamentales y algunas bibliotecas importantes. La segunda trata algunas herramientas fundamentales que son base para el trabajo en el resto del libro. Finalmente la tercera parte muestra cómo abordar algunos problemas usuales en la ciencia o en la tecnología utilizando Python, de forma teórica y práctica.
En todos los casos este libro esquiva la pretensión de ser una referencia absoluta, sino que tiene el propósito de allanar el camino de quienes dan los primeros pasos en el lenguaje y abordan la búsqueda de soluciones de algunos problemas básicos (pero no por eso menos importantes) mediante técnicas numéricas y en algunos casos, también analíticas.
Tanto los textos como el código fuente, ejemplos e imágenes son Copyright de Facundo Batista y Manuel Carlevaro y están compartidos bajo la licencia Creative Commons Atribución-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0), salvo que se especifique puntualmente lo contrario.
![]() |
1 | Introducción a Python |
---|---|
Qué es Python. Propiedades del lenguaje, multiparadigma, interpretado. Biblioteca estándar, módulos externos, integrado en Python. Editando y ejecutando, usando módulos. El intérprete interactivo, Jupyter Notebooks, explorando. Cómo pedir ayuda. | |
![]() |
2 | Tipos de datos |
Números, cadenas, listas, tuplas. Pensando como un Pythonista. Más tipos: conjuntos y diccionarios. Iteradores. | |
![]() |
3 | Controles de flujo |
Estructuras if, while, for. Excepciones. | |
![]() |
4 | Encapsulando código |
Funciones, espacios de nombres, generadores, clases, módulos. | |
![]() |
5 | Python más avanzado |
Generadores. Administradores de contexto: uso, construcción clásica y abreviada. Acercándonos a la programación funcional: funciones lambda, map, filter y reduce. Pruebas de unidad: conceptos, estados de salida, caso ejemplo. Decoradores: uso y conceptos, construcción. Coincidencia de patrones: conceptos e introducción. | |
![]() |
6 | Clases |
Atributos de instancia y de clase. Métodos de clase y estáticos. Herencia: concepto y ejemplos. Simple y no lineal. Propiedades. Creando tipos de datos: conceptos y métodos con nombres especiales. | |
![]() |
7 | Entornos de ejecución de Python |
Introducción a la problemática. Necesidad de múltiples entornos. Repetibilidad y aislamiento. Entornos virtuales, creación y activación, instalación de paquetes. Herramientas. Contenedores: conceptos, distinción con imágenes. El Dockerfile. Creando imágenes. Ejecutando contenedores. Ejemplos prácticos. | |
![]() |
8 | Sobre la velocidad de procesamiento |
Introducción. Profiling. Encontrando dónde un programa es lento. Midiendo pequeñas partes de código. Usando Python de forma más eficiente. Planes alternativos: Mypyc, Cythin, Numba, conclusiones. Usando código compilado: extendiendo Python con C o C++, aprovechar código previamente compilado. | |
![]() |
9 | Procesamiento en paralelo |
Introducción. Qué es la concurrencia. Threading. Usando hilos. Modificando estructuras en sistemas multithreading, condiciones de carrera, locks. Sistemas asincrónicos, ventajas y desventajas. Usando async. Procesamiento en múltiples procesadores, compartiendo datos. Trabajando con números. Ejemplo práctico. | |
![]() |
10 | Interfaces gráficas |
Concepto de interfaz gráfica. Qt. PyQt. Documentación. Una aplicación mínima. Widgets. Diseño. Señales. Una aplicación real. La ventana principal. Menús y barra de tareas, acciones. Diálogos. Tablas: vista y modelo. Ejecución en otro hilo para no bloquear la interfaz. |
![]() |
11 | Numpy |
---|---|
Introducción y conceptos. El array. Multidimensionalidad. Slices. Indización avanzada, máscaras, arreglos correlacionados. Broadcasting. | |
![]() |
12 | Aritmética de punto flotante |
Introducción. La necesidad del punto flotante. La estructura y sus partes. Valores especiales.Binario y decimal. Errores, comparaciones. Uso en aplicaciones científicas. | |
![]() |
13 | Matemática simbólica |
Conceptos y operaciones básicas. Simplificación de expresiones. Solución de ecuaciones. Funciones y cálculo diferencial e integral. Evaluaciones numéricas y gráficos. | |
![]() |
14 | Versionado de código |
Control de versiones, utilidad, necesidad, casos de uso. Ramas. Git. Flujo de traajo, ciclo de vida de una rama, ejemplo práctico. Lecturas recomendadas. | |
![]() |
15 | Manipulación de datos |
Leyendo archivos, formas de apertura. Trabajando con datos en formato textual, tres formatos comunes: CSV, JSON y XML. Trabajando con datos binarios, un formato muy usado: HDF5. Pandas, carga de datos, estructuras básicas, operaciones. |
![]() |
16 | Elementos de estadística |
---|---|
Números aleatorios. Distribuciones: medidas de centralidad y dispersión. Test de hipótesis. Estimación no paramétrica. | |
![]() |
17 | Modelado estadístico |
Introducción. Coeficiente de correlación. Definición de modelos estadísticos con patsy. Regresión lineal y discreta. Series temporales. | |
![]() |
18 | Ecuaciones algebraicas |
Sistemas de ecuaciones lineales. Condicionamiento. Factorización LU. Problema de autovalores. Ecuaciones no lineales de una y varias dimensiones. | |
![]() |
19 | Integración numérica |
Integración simbólica. Transformaciones integrales. Integración numérica en una dimensión: métodos de Newton-Cotes, cuadraturas gaussianas, integración Monte Carlo. Integración numérica con SciPy. Integración múltiple. | |
![]() |
20 | Ecuaciones diferenciales ordinarias |
Introducción. Solución analítica. Métodos numéricos. Ecuación diferencial con valores iniciales. | |
![]() |
21 | Ecuaciones en derivadas parciales |
Clasificación. Método de las diferencias finitas. Ecuación 1D con método explícito. Solución con método implícito. Implementación con matriz rala. Método de elementos finitos. Ecuación de Poisson. Formulación variacional. Implementación en FEniCS. | |
![]() |
22 | Optimización |
Optimización unidimensional. Optimización multidimensional sin restricciones. Optimización multidimensional con restrcciones. Programación lineal y no lineal. Algoritmo genético. | |
![]() |
23 | Aprendizaje automático |
Introducción. Nodos, pesos y funciones de activación. Aprendizaje. Ejemplo de red usando Numpy. Ejemplo con Keras. | |
![]() |
24 | Procesamiento en GPU |
Introducción. Arquitectura de una GPU. Kernels y threads en CUDA. Organización de threads. Producto de matrices en GPU con PyCUDA y PyOpenCL. |
El libro está disponible para su descarga gratuita, porque nuestro objetivo principal siempre fue y sigue siendo difundir el conocimiento. Creemos que el acceso a herramientas y contenidos de calidad no debería estar condicionado por barreras económicas, y por eso elegimos ponerlo a disposición de toda la comunidad sin restricciones. Nuestro interés está en que llegue a la mayor cantidad posible de personas que puedan aprovecharlo, aprender y, en lo posible, compartirlo con otros.
En otras palabras: es gratis, bajalo, compartilo.
Dicho esto, la elaboración de este material implicó mucho trabajo: años de preparación, revisiones, correcciones, ejemplos, pruebas y más pruebas. Por eso, se aceptan y agradecen donaciones.
Para donar hay varias opciones. Consideralo como que nos estás invitando a tomar o comer algo, y ahí decidí el monto:
Cualquier sugerencia o idea nos podés mandar un mail o dejar un comentario en la página del proyecto.
Facundo Batista es desarrollador de software, divulgador técnico y uno de los principales referentes de la comunidad Python en América Latina. Es cofundador de PyAr (Python Argentina), una comunidad fundamental en el crecimiento y la difusión del lenguaje Python en la región. Desde sus comienzos en el mundo del software libre, Facundo ha sido un impulsor del uso abierto, colaborativo y responsable de la tecnología.
Es core developer de Python y fellow de la Python Software Foundation. Además, ha participado activamente en el desarrollo de herramientas de software, en la organización de eventos como PyCon Argentina y en la creación de espacios de formación y discusión técnica. Su compromiso con la comunidad se extiende también al trabajo como mentor y formador de nuevas generaciones de programadores. Estudió Ingeniería en Electrónica en la Universidad Nacional de La Matanza (Argentina) y obtuvo un máster en Ingeniería de la Innovación en la Università di Bologna (Italia).
Además de su trabajo técnico, Facundo es un entusiasta de la escritura y la comunicación clara de ideas complejas. Es autor de numerosos artículos y charlas, tanto en español como en inglés, en los que combina precisión técnica con una visión humanista de la tecnología. Su estilo cercano, generoso y pedagógico lo convierte en una figura muy valorada en comunidades de software libre y programación.
Manuel Carlevaro es físico e Investigador Independiente del CONICET en el Instituto de Física de Líquidos y Sistemas Biológicos. Además, es Profesor Titular en la Facultad Regional La Plata de la Universidad Tecnológica Nacional, donde dirige el Grupo de Materiales Granulares (GMG) y tiene a su cargo la materia Cálculo Avanzado en la carrera de Ingeniería Mecánica.
Formado como Licenciado en Física por la Universidad Nacional de Rosario (1995) y Doctor en Ciencias Exactas por la UNLP (2002), Carlevaro también tuvo roles en la Universidad de Buenos Aires y en la Autoridad Regulatoria Nuclear antes de incorporarse al CONICET. Sus actividades de docencia abarcan cursos de grado y posgrado en herramientas computacionales, métodos de modelado, física de materiales granulares y sistemas dinámicos, tomando parte activa en la formación de científicos e ingenieros en la región.
En el campo de la investigación, su trabajo se centra en la física de materiales blandos, biofísica, fluidos confinados y sistemas complejos. Su enfoque combina modelado matemático, simulación computacional y análisis teórico con una fuerte vocación aplicada.