Arreglos numéricos. Programación Clase 23

Documentos relacionados
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Estatutos de Control C# Estatutos de Decisión (Selección)

Representación de números enteros: el convenio exceso Z

Principios de Computadoras II

Programación en java. Estructuras algorítmicas

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Elementos de un programa en C

Herramientas de Programación. M.C. Juan Carlos Olivares Rojas

Algoritmos y programas. Algoritmos y Estructuras de Datos I

COMO REALIZAR CONSULTAS CON EL CONSTRUCTOR DE GEOCONSULTAS DEL SIG GUADUA.

Programación I: Matrices - Arreglos bidimensionales

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

Instituto Tecnológico de Celaya

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Una base de datos de Access puede estar conformada por varios objetos, los más comunes son los siguientes:

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

5to. ESTANDARES MATEMATICOS COMUNES FUNDAMENTALS

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

Java para programadores

Objetivos de la sesión. Aplicación de consola 7/30/11. Código con que se inicia un programa en Visual C# (aplicación de consola)

ÁREA: MATEMÁTICAS UNIDAD : 1 TEMPORALIZACIÓN: OCTUBRE 1ª QUINCENA OBJETIVOS CONTENIDOS CRITERIOS DE EVALUACIÓN

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Programación en Visual Basic Ricardo Rodríguez García

Operadores aritméticos: suma (+), resta (-), producto (*), cociente (/) y potencia (**).

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

FÓRMULAS Y FUNCIONES

VECTORES EN EL PLANO CON DERIVE

El lenguaje C. 1. Identificadores, constantes y variables

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Aritmética de Enteros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Lección 2: Notación exponencial

Expresiones y sentencias

Capítulo 16. Diagrama de Clases UML

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Bases Matemáticas para la Educación Primaria. Guía de Estudio. Tema 3: Números racionales. Parte I: Fracciones y razones Números racionales

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

PLANIFICACIÓN DE LA SESIÓN DE APRENDIZAJE. Descubrimos los criterios de divisibilidad

Qué es una tabla dinámica? Para qué sirve una tabla dinámica?

Diagramas de secuencia

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Algoritmos. Intro. Prof. Raquel Torres Peralta / Gerardo Sanchez S. Unison

1. Computadores y programación

El proceso de trabajo para obtener el rectángulo raíz de dos y sus líneas estructurales características es el siguiente:

Computación II. Introducción a Visual Basic

Matemáticas 2º E.S.P.A. Pág.1 C.E.P.A. Plus Ultra. Logroño

Tema: Excel Formulas, Funciones y Macros

Jornadas sobre Gnu/Linex: Uso de Software Libre en las Administraciones públicas. Sonia Pizarro Redondo

Tema 2 Introducción a la Programación en C.

Ficha de Aprendizaje N 13

QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)

Estándares de evaluación en la materia de MATEMÁTICAS de 1º de ESO. Curso 2016/2017.

MICROSOFT EXCEL 2010

Operadores. Javier Fernández Rivera -

Curso SIG. Curso SIG Conceptos Básicos y Funciones. Conceptos Básicos y Funciones. Representaciones del mundo. Curso SIG - Pablo Rebufello 1

MongoDB Up & Running

Revisora: María Molero

Funciones y Condicionales Introducción a la Programación

GUÍA BÁSICA DE SCHEME v.4

Análisis y Manejo de datos en Excel 2013 con tablas, funciones y tablas dinámicas

INSTITUCIÓN EDUCATIVA LICEO DEPARTAMENTAL ÁREA DE TECNOLOGÍA E INFORMÁTICA

Diagramas de secuencia

PROGRAMACIÓN DE LOS CONTENIDOS DE MATEMÁTICAS EN LA PREPARACIÓN DE LA PARTE COMÚN DE LA PRUEBA DE ACCESO A LOS C.F.G.S. (Opción C)

Definición de Memoria

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

MICROSOFT PowerPoint 2016 Básico

Eje 2. Razonamiento lógico matemático

Tema: Funciones en Excel (III) Funciones de fecha y hora Las fechas son a menudo una parte crítica de análisis de datos

Algoritmos y Programas

1

I. E. NORMAL SUPERIOR SANTIAGO DE CALI ASIGNATURA DE TECNOLOGÍA E INFORMÁTICA LIC. CARLOS ANDRÉS CASTAÑEDA HENAO GRADO 8º

ESCUELA DE INFORMÁTICA

Tema 4. Operadores y Expresiones

Guía 1: PATRONES DE REPETICIÓN

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Evidentemente, la superficie es un triángulo rectángulo de base 1 y altura también la unidad, por tanto su área es 1/2.

Tema: Entorno a C# y Estructuras Secuenciales.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Manejo de Filas, Columnas, Celdas y Rangos

Aplicación: cálculo de áreas XII APLICACIÓN: CÁLCULO DE ÁREAS

SCUACAC026MT22-A16V1. SOLUCIONARIO Ejercitación Generalidades de números

Números Racionales. Repaso para la prueba. Profesora: Jennipher Ferreira Curso: 7 B

HOJAS DE CÁLCULO (4º ESO)

UNIDAD DE APRENDIZAJE I

Práctica de laboratorio Uso de la Calculadora de Windows con direcciones de red

13. Utilizar la fórmula del término general y de la suma de n términos consecutivos

Nota Técnica (tcpmdt_es_v75_par001_gml_r2) Importación y exportación de GML de parcelas catastrales

Funciones como Subprogramas en C++

ESCALARES Y VECTORES

Administración de la producción. Sesión 9: Hojas de cálculo (Microsoft Excel)

ƒ : {(1, 4), (2, 5), (3, 6), (4, 7)}.

FUNCIONES PHP: DECLARACIÓN Y LLAMADAS. PARÁMETROS, RETURN. EJERCICIOS EJEMPLOS RESUELTOS. (CU00827B)

Materia: Matemática de 5to Tema: Método de Cramer. Marco Teórico

Tema 2. El lenguaje JAVA

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

Contenido. Introducción Usando di Monitoring como un usuario normal Uso de di Monitoring como un operador de entrada de datos...

FORMATO CONDICIONAL EN EXCEL

Transcripción:

Arreglos numéricos Programación http://progra.usm.cl Clase 23 Objetivos de la clase Introducir el tipo array del módulo numpy para representar arreglos numéricos. Explicar la motivación para usar arreglos numéricos en vez de listas. Diapositivas Arreglos Descargar módulo numpy en http://tinyurl.com/bajar-numpy Tipo de datos: array colección ordenada de datos, tamaño fijo, todos los elementos tienen el mismo tipo. En esta clase comenzaremos a pasar arreglos numéricos. Para esto, necesitamos instalar la biblioteca NumPy que provee los tipos de datos y funciones necesarias para operar con arreglos. El link presentado en la primera diapositiva lleva a la página desde donde se puede descargar el instalador para Windows. Un arreglo es una secuencia ordenada de valores, de manera muy similar a una lista. Sin embargo, hay algunas diferencias fundamentales entre ambos tipos de datos, de las cuales las más relevantes para los alumnos son: los arreglos en general tienen tamaño fijo, mientras que las listas suelen ir creciendo o decreciendo durante la ejecución del programa; todos los elementos de un arreglo tienen el mismo tipo, mientras que en las listas esto no necesariamente es así. Los arreglos de NumPy son, pues, muy parecidos a los arreglos que conocíamos de C y Pascal. Por otra parte, proveen operaciones mucho más convenientes para trabajar con arreglos completos, por lo que no suele ser necesario operar elemento a elemento. En este sentido, son más parecidos a los arreglos de Fortran. A diferencia de los arreglos en lenguajes compilados, los arreglos de NumPy no son declarados, sino que son creados dinámicamente. Las ventajas que ofrecen los arreglos son: eficiencia (los elementos se guardan contiguos en la memoria, a diferencia de las listas); 1

proveen operaciones que operan sobre todos los datos a la vez, y no uno por uno; proveen funciones convenientes para crearlos y operar sobre ellos. Por estos motivos, los arreglos numéricos son las estructuras de datos más usadas en aplicaciones de ingeniería. En la clase de hoy cubriremos sólo arreglos de una dimensión. En la próxima clase veremos arreglos de varias dimensiones. Crear arreglos usando valores Importar constructor: from numpy import array Arreglo de enteros: a = array([6, 1, 4, -2, 5, 1]) Arreglo de reales: b = array([6.0, 1, 3, 9]) b = array([6, 1, 3, 9]).astype(float) Para crear un arreglo que tenga los valores que uno desea, la manera más simple es pasar la lista de valores a la función array, que es el constructor del tipo de datos del mismo nombre. El arreglo tiene un tipo asociado, que es el más general de los tipos de sus elementos. Por ejemplo, si hay enteros y reales, el arreglo será de reales. Si apareciera un número complejo, entonces el arreglo completo será de complejos. Una manera de convertir un arreglo a otro tipo es usar el método astype, que recibe el nuevo tipo como parámetro. Otras maneras de crear arreglos >>> from numpy import * >>> zeros(5) array([ 0., 0., 0., 0., 0.]) >>> ones(5) array([ 1., 1., 1., 1., 1.]) range(3.2, 4.8, 0.3) array([ 3.2, 3.5, 3.8, 4.1, 4.4, 4.7]) >>> linspace(0, 2.1, 5) array([ 0., 0.525, 1.05, 1.575, 2.1]) Muchas veces no suele ser conveniente crear los arreglos indicando sus elementos uno por uno. Esto es especialmente cierto cuando los valores tienen algún tipo de estructura. La función zeros(n) crea un arreglo de tamaño n inicializado con ceros. La función ones(n) crea un arreglo de tamaño n inicializado con unos. La función arange(a, b, c) funciona igual que la función range, con la diferencia que sus parámetros pueden ser de tipo float y el valor retornado siempre es un arreglo. Los parámetros b y c son opcionales. La función linspace(a, b, n) crea un arreglo de n valores equiespaciados que van desde a hasta b. Explique cada función hasta que quede claro qué es lo retorna cada una. Estas funciones se pueden combinar con operaciones sobre arreglos para crear otros arreglos con estructuras similares, lo que está ejemplificado en los ejercicios de esta clase. En esta diapositiva, se usa la forma from modulo import * para importar todas las funciones y clases que están definidas en un módulo. En este caso, se hace por brevedad, ya que el espacio de la diapositiva es reducido. También lo puede hacer así en clases. Lo que hay que tener claro es que en general esto no es una buena práctica, principalmente porque los nombres importados pueden ocultar objetos que existían desde antes y que están asignados con el mismo nombre. Un ejemplo concreto son las funciones 2

sum, max y min que están definidas por NumPy; al importar todos los nombres, las funciones homónimas de Python ya no están disponibles directamente. En las diapositivas siguientes, se supondrá que los nombres a utilizar ya han sido importados. Operaciones sobre arreglos = array([6.1, 3.4, -2.7]) >>> b = array([12.8, 0.77, 3]) array([ 6.1, 3.4, -2.7]) * 2 array([ 12.2, 6.8, -5.4]) + 0.1 array([ 6.2, 3.5, -2.6]) + b array([ 18.9, 4.17, 0.3 ]) Los arreglos soportan todas las operaciones aritméticas elementales. La principal característica de los arreglos es que todas las operaciones se aplican elemento por elemento, independientemente del tamaño del arreglo. Cuando los operandos son un arreglo y un escalar (es decir, un único valor), se usa el escalar como operando para cada elemento del arreglo. Cuando los dos operandos son arreglos, la operación es aplicada elemento a elemento. Para esto, los arreglos deben tener exactamente el mismo tamaño, y el resultado será también de ese tamaño. Explique los ejemplos de la diapositiva para que esto quede muy claro. Comparación de arreglos = array([5.0, 7.0, 8.0]) >>> b = array([5.5, 6.5, 4.1]) >>> c = array([9.0, 9.2, 9.4]) < b array([ True, False, False], dtype=bool) < c array([ True, True, True], dtype=bool) ll(a < c) True ny(b > 6) True Los operadores relacionales también operan elemento a elemento, lo que puede resultar un poco menos intuitivo. Al comparar dos arreglos (por ejemplo, usando < o ==), el resultado no es True ni False, sino un arreglo de valores booleanos indicando si los elementos correspondientes son o no iguales. Para reducir los valores a un único valor, se puede usar las funciones any y all, dependiendo de lo que se desee saber. any retorna True si por lo menos un elemento del arreglo es verdadero. all retorna True si todos los elementos del arreglo son verdaderos. Por lo tanto, para saber si dos arreglos son iguales, debe hacerse así: all(a == b). Las funciones any y all deben ser importadas desde NumPy. Python provee dos funciones con el mismo nombre que funcionan con listas, pero no están pensadas para trabajar con arreglos. Modificar arreglos = arange(12.9, 17.1, 0.8) array([ 12.9, 13.7, 14.5, 15.3, 16.1, 16.9]) [0] = 99 array([ 99., 13.7, 14.5, 15.3, 16.1, 16.9]) [2:5] = 0 array([ 99., 13.7, 0., 0., 0., 16.9]) [1:6:2] += 2 array([ 99., 15.7, 0., 2., 0., 18.9]) 3

Los elementos de los arreglos pueden ser obtenidos a través de su índice. Los elementos se pueden editar al igual que en las listas. Además, se puede obtener y modificar rebanadas de los arreglos usando la sintaxis arreglo[a:b:c], que significia los elementos desde el a-ésimo hasta el b-ésimo, tomando de c en c (sin incluir el b-ésimo). En los ejemplos, se modifica secciones enteras del arreglo asignándoles un valor escalar. También podría asignarse un arreglo más pequeño a una sección de un arreglo más grande. Arreglos aleatorios >>> from numpy.random import random array([ 0.3695554, 0.60922597, 0.55403956]) array([ 0.32895091, 0.32733551, 0.94215653]) array([ 0.95636538, 0.11841402, 0.68049519]) El módulo numpy.random provee muchas funciones para generar arreglos de números aleatorios. Aquí sólo presentaremos la función random, que crea arreglos aleatorios con valores reales entre 0 y 1. Explique qué es un valor aleatorio, por qué al llamar la misma función varias veces se obtienen resultados distintos, y haga notar en los ejemplos que los valores siempre están entre 0 y 1. Ejercicios: creación de arreglos Crear los siguientes arreglos: [5,5,5,5,5,...,5,5,5,5,5] (cuarenta elementos) [0,9,9,9,9,...,9,9,9,9,0] (cien elementos) [1, 2, 3,..., 98, 99, 100, 99, 98,..., 3, 2, 1] [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1] [0, 1, 2, 0, 1, 2, 0, 1, 2,...] (tres mil elementos) Arreglo aleatorio de cien números entre 1 y 1 Arreglo aleatorio de cien números entre 8,4 y 9,7 Ejercicio práctico para crear arreglos con ciertas estructuras. El objetivo es resolverlos usando sólo operaciones sobre arreglos, evitando utilizar ciclos. Guíe a los alumnos para que a ellos mismos se les ocurra las soluciones. Pruebe en la consola las ideas que ellos propongan para ponerlas a prueba. Las soluciones están en los archivos anexos a la clase. Ejercicio: diferencias finitas Escriba una función que reciba como parámetro un arreglo y retorne otro arreglo con las diferencias entre elementos consecutivos del arreglo original: = array([5, 1, 7, 6, 4, 8, 9]) >>> diferencias(a) array([-4, 6, -1, -2, 4, 1]) Ejercicio sencillo: obtener las diferencias finitas de un arreglo (las diferencias entre elementos consecutivos). Nuevamente, la idea es evitar usar ciclos. Es importante notar que el resultado no tiene el mismo tamaño que el argumento, sino uno menos. Procure que los alumnos se den cuenta de este detalle mientras intentan resolver el ejercicio. La solución es obtener dos rebanadas, cada una omitiendo uno de los extremos, y luego restarlas. En la solución incluida en los archivos anexos, se usa el atributo a.size para obtener el tamaño del 4

arreglo. La función len funciona correctamente con arreglos de una dimensión, por lo que podría ser utilizada. Sin embargo, no entrega el tamaño correcto con los arreglos que veremos en la próxima clase. Aplicación de funciones >>> from numpy import linspace, pi, sin = linspace(0, pi/2, 5) >>> sin(a) array([ 0., 0.38268343, 0.70710678, 0.92387953, 1. ]) NumPy provee también funciones matemáticas que, al igual que las operaciones básicas, también son aplicadas elemento a elemento. En este ejemplo, se crea un arreglo de 5 elementos que van desde 0 hasta π/2, y se le aplica la función seno. Como se puede ver en el resultado, se obtienen valores que van creciendo desde 0 a 1, tal como lo hace la función seno en el intervalo [0, π/2]. Puede mostrar en la consola cuál es el resultado de la llamada a linspace, y hacer ver cómo cada elemento de a corresponde a uno del arreglo sin(a). Ejercicio para calcular la suma del área de rectángulos. Todos los rectángulos tienen la misma base, y las alturas están dadas por una función. La solución es obtener un arreglo con las coordenadas x del lado izquierdo de cada rectángulo, y luego aplicarle la función exp (que debe ser importada desde NumPy). Con esto, se obtiene el arreglo de las alturas de los rectángulos. Luego, basta con multiplicar todo el arreglo por el largo de la base de los rectángulos y sumarlos. Para sumar los elementos de un arreglo, puede usar la función sum provista por NumPy, que está diseñada para trabajar sobre arreglos. Nuevamente, intente que a los alumnos se les ocurra la solución. También discuta cómo obtener el largo de la base de manera simple. La solución está incluida en los archivos anexos. Una vez discutido el problema con los alumnos, explique la solución en detalle. 5