Está en la página 1de 7

Intro_Python

March 17, 2017

1 Introducción a Python
Python es un lenguaje de programación “Open Source”, “No tipado” y “Orientado a Objetos”
que posee una gran cantidad de librerías, paquetes y herramientas, extensamente probadas, para
realizar computación científica.
En el sitio oficial (https://docs.python.org/3/) se puede consultar la documentación y varios
tutoriales del lenguaje.
Los paquetes mas utilizados para computación científica son:

• Numpy (http://www.numpy.org/)
• SciPy (https://www.scipy.org/)
• Matplotlib (http://matplotlib.org/)
• Scikit-learn (http://scikit-learn.org/stable/)
• Pandas (http://pandas.pydata.org/)

En cuanto a los entornos de programación. Los mas difundidos son:

• PyCharm (https://www.jetbrains.com/pycharm/)
• Enthought Canopy (https://www.enthought.com/products/canopy/)
• Anaconda(https://www.continuum.io/downloads)

1.1 Numpy
Es una librería fundamental para el desarrollo de computación científica en Python. Entre otras
cosas contiene:

• Implementación de objetos N-dimensionales.


• Wrappers que integran funciones extensamente probadas y eficientes implementadas en
código C/C++ y Fortran.
• Funciones y utilidades para trabajar Álgebra lineal, Transformada de Fourier y Generación
de Números Aleatorios.
• Utilizados para persistir objetos N-dimensionales.

Ademas de su uso científico, Numpy puede ser utilizadas con un eficiente contenedor mul-
tidimensional de datos genéricos. Esta librería es utilizada como dependencia requerida por la
mayoría de las librerías de Python para computación científica.

1
La entidad basica en Numpy son los objetos ndarray: Los previamente mensionados objetos
N-dimensionales, con datos homogeneos y de tamaño fijo. Una instancia de la clase ndarray, rara-
mente es instanciada directamente, en cambio, se utiliza algun metodo que retorna una instancia
de esta clase.

In [3]: import numpy as np


a = np.array([1,2,3])
a

Out[3]: array([1, 2, 3])

In [4]: b = np.ones((3,2))
b

Out[4]: array([[ 1., 1.],


[ 1., 1.],
[ 1., 1.]])

In [7]: c = np.zeros((3,2))
c

Out[7]: array([[ 0., 0.],


[ 0., 0.],
[ 0., 0.]])

In [10]: d = np.empty((3,2))
d

Out[10]: array([[ 0., 0.],


[ 0., 0.],
[ 0., 0.]])

In [16]: # numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=


# Return evenly spaced numbers over a specified interval.
e = np.linspace(1,10,5)
e

Out[16]: array([ 1. , 3.25, 5.5 , 7.75, 10. ])

In [15]: # numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None


# Return numbers spaced evenly on a log scale.
# The sequence starts at base ** start (base to the power of start) and en

f = np.logspace(1,2,5)
f

Out[15]: array([ 10. , 17.7827941 , 31.6227766 , 56.23413252, 100.

2
1.2 Numpy - Persistir Datos
Para persistir y cargar en memoria los datos alojados en un ndarray, se pueden utilizar algunos de
los siguientes metodos:

• np.save: Escribe un array en un archivo binario con extencion .npy


• np.savez: Escribe multiples arrays en un archivo binario con extencion .npz
• np.load: Lee uno o mas arrays desde un archivo .npy o .npz
• np.savetxt: Escribe un array a un archivo de texto plano
• np.loadtxt: Lee un array desde un archivo de texto plano

1.3 Ejemplo Basicos de Manipulación de Numpy arrays


In [18]: import numpy as np

# Se fija una semilla para poder reproducir el experimiento


rnd = np.random.RandomState(seed=123)

# Se genera un array aleatorio


X = rnd.uniform(low=0.0, high=1.0, size=(3, 5)) # a 3 x 5 array
print(X)

[[ 0.69646919 0.28613933 0.22685145 0.55131477 0.71946897]


[ 0.42310646 0.9807642 0.68482974 0.4809319 0.39211752]
[ 0.34317802 0.72904971 0.43857224 0.0596779 0.39804426]]

1.3.1 Acceso a los elementos del array


In [19]: # Se obtiene un solo elemento del array
# En este caso, el que se encuentra en la posición del array (Si, en Pytho
print(X[0, 0])

0.696469185598

In [20]: # Se obtiene una fila


# En este caso la segunda fila
print(X[1])

[ 0.42310646 0.9807642 0.68482974 0.4809319 0.39211752]

In [21]: # Se obtiene una columna


# En este caso la segunda columna
print(X[:, 1])

[ 0.28613933 0.9807642 0.72904971]

3
In [22]: # Se realiza la Transpuesta del array
print(X.T)

[[ 0.69646919 0.42310646 0.34317802]


[ 0.28613933 0.9807642 0.72904971]
[ 0.22685145 0.68482974 0.43857224]
[ 0.55131477 0.4809319 0.0596779 ]
[ 0.71946897 0.39211752 0.39804426]]

In [24]: # Creación de un vector fila de números equidistantes en un intervalo espe


y = np.linspace(0, 12, 5)
print(y)

[ 0. 3. 6. 9. 12.]

In [25]: # Tranformación de un vector fila a un vector columna


print(y[:, np.newaxis])

[[ 0.]
[ 3.]
[ 6.]
[ 9.]
[ 12.]]

In [27]: # Dimenciones del array


print(X.shape)

(3, 5)

In [28]: # Re-dimencionar array


print(X.reshape(5, 3))

[[ 0.69646919 0.28613933 0.22685145]


[ 0.55131477 0.71946897 0.42310646]
[ 0.9807642 0.68482974 0.4809319 ]
[ 0.39211752 0.34317802 0.72904971]
[ 0.43857224 0.0596779 0.39804426]]

1.4 SciPy (Breve introducción)


Scipy es una colección de paquetes que, normalmente, se deben importar de forma separada.

• cluster: Vector Quantization / Kmeans


• fftpack: Discrete Fourier Transform algorithms

4
• integrate: Integration routines
• interpolate: Interpolation Tools
• io: Data input and output
• lib: Python wrappers to external libraries
• lib.blas: Wrappers to BLAS library
• lib.lapack: Wrappers to LAPACK library
• linalg: Linear algebra routines
• misc: Various utilities that don’t have another home
• ndimage: n-dimensional image package
• odr: Orthogonal Distance Regression
• optimize: Optimization Tools
• signal: Signal Processing Tools
• sparse: Sparse Matrices
• sparse.linalg: Sparse Linear Algebra
• sparse.linalg.dsolve: Linear Solvers
• sparse.linalg.dsolve.umfpack: Interface to the UMFPACK library
• sparse.linalg.eigen: Sparse Eigenvalue Solvers
• sparse.linalg.eigen.arpack: Eigenvalue solver using iterative methods
• sparse.linalg.eigen.lobpcg: Locally Optimal Block Preconditioned Conjugate Gradient
Method (LOBPCG)
• spatial: Spatial data structures and algorithms
• special: Airy Functions
• stats: Statistical Functions
• weave: Wrappers for C/C++ libraries

1.4.1 Ejemplos básicos SciPy


Integración Numérica

In [30]: from scipy.integrate import quad


val, err = quad( lambda x: np.sin(x) , 0 , np.pi, full_output=False)
print(val, err)

2.0 2.220446049250313e-14

“lambda x: np.sin(x)” es una función lambda (Funciones anonimas)


Algunas Estadísticas Descriptivas

In [31]: x=np.random.random(100) # 100 random numbers


q25, q50, q75 = np.percentile(x, [25,50,75])
q25, q50, q75

Out[31]: (0.24151838462868377, 0.46700140552552505, 0.69547647971929383)

5
1.4.2 Algunas Distribuciones en SciPy
Distribución Uniforme

In [34]: from scipy import stats


dist = stats.uniform(0,2) # Entre 0 y 2
r = dist.rvs(10) # 10 variables aleatorias
print(r)
p = dist.pdf(1) # pdf (Probability Density Function) evaluado en x=1
p

[ 1.34731484 1.65900005 1.34367478 0.80986738 0.76665432 1.39023769


0.9854178 1.16839025 1.90220702 0.30445145]

Out[34]: 0.5

Distribución Normal

In [39]: from scipy import stats


import numpy as np
dist = stats.norm(0,1) # Media 0 y Desviación estandar 1
r = dist.rvs(10) # 10 variables aleatorias
print(r)
p = dist.cdf(np.array([-1., 0, 1])) # cdf (Cumulative Distribution Functio
p

[-0.20032987 -0.05743896 -0.24347747 -1.06905165 -1.17704142 0.18965559


-0.08615067 -0.96824073 0.37465049 0.58097777]

Out[39]: array([ 0.15865525, 0.5 , 0.84134475])

1.5 Matplotlib
Una parte importante del modelado numérico es la visualización de datos. Matplotlib es la librería
mas utilizada para hacerlo en Python

In [45]: %matplotlib inline


#La linea anterior es para visualizar los gráficos directamente en el note
import matplotlib.pyplot as plt
# Graficar una linea
x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), c="r");
# Scatter-plot points
x = np.random.normal(size=500)
y = np.random.normal(size=500)
plt.scatter(x, y);

6
Puende encontrar muchos mas ejemplos de tipos de gráficos en
http://matplotlib.org/index.html

También podría gustarte