In [1]:
import this
In [6]:
a = 37
In [7]:
type(a)
Out[7]:
In [8]:
b = 37.02020
In [9]:
type(b)
Out[9]:
In [10]:
c = 1+2j
In [11]:
type(c)
Out[11]:
d = (a,b,c) d
In [14]:
print 'el primer elemento de la tupla es:', d[0]
In [15]:
#lo que no se puede hacer con las tuplas
d[0] = 73
In [26]:
#Un metodo útil de las tuplas index nos devuelve el indice donde se encuentra algun valor
d.index(37.0202)
Out[26]:
In [29]:
# Recorrer una tupla
for item in xrange(len(d)):
print d[item]
Los diccionarios, deben su nombre a que son colecciones que relacionan una clave y un valor
El primer valor se trata de la clave y el segundo del valor asociado a la clave. Como clave podemos utilizar cualquier valor inmutable: podríamos usar números, cadenas, booleanos, tuplas, ... pero no listas o diccionarios, dado que son mutables
In [31]:
d = {'Nombre':'Pablo','Apellido':'Lovato','Carrera':'IACI','DNI':37.000}
In [32]:
d['DNI']
Out[32]:
In [34]:
d['Nombre'] = 'Pappo'
In [35]:
d
Out[35]:
La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conoce por arrays, o vectores. Pueden contener cualquier tipo de dato: numeros, cadenas, booleanos y tambien listas¡¡. Nosotros vamos a utilizar las listas de Numpy porque son muuucho más rápidas computacionalmente
In [39]:
l = [1,'uno',1+1j]
l
Out[39]:
In [41]:
# Podemos acceder a los elementos como en las tuplas y asignar valores(Tener en cuenta que los indices comienzan en cero¡¡¡)
l[0]
Out[41]:
In [43]:
# Asigno al último elemento la palabra Python
l[-1] = 'Python'
l
Out[43]:
In [44]:
#Importamos el modulo numpy con el alias np
import numpy as np
In [45]:
#Creo un array
a = np.array([1,0,0])
a
Out[45]:
In [46]:
type(a)
Out[46]:
In [47]:
#Ejemplo creo una lista de Python de 0 a 1000 y calculo el cuadrado de cada elemento
L = range(1000)
In [48]:
%%timeit
#las expresiones que tienen %% son funciones especiales de Ipython por ejemplo %%timeit mide el tiempo de procesamiento
[i**2 for i in L]
In [49]:
#Ahora hago lo mismo con Numpy
a = np.arange(1000)
In [50]:
%%timeit
a**2
In [51]:
print 'Numpy es '
print 87/3.16
print 'veces mas rapido'
In [52]:
#Creando arrays
a = np.array([1,1,1]) # 1D
b = np.array([[1,1,1],[1,1,1]]) #2d (Matrix)
c = np.array([[[1,1,1],[1,1,1],[1,1,1]]]) #3D (Tensor...)
In [53]:
print a.shape
print b.shape
print c.shape
In [54]:
#Podemos crear arrays predeterminados con funciones muy utiles
a = np.arange(10) # un array de enteros 0 a 10(no lo incluye)
a
Out[54]:
In [55]:
# Array de 1 a 9 con paso 2
b = np.arange(1, 9, 2)
b
Out[55]:
In [56]:
#Como en Matlab
a = np.ones((3,3))
a
Out[56]:
In [57]:
b = np.zeros((5,5))
b
Out[57]:
In [58]:
c = np.eye(10)
c
Out[58]:
In [59]:
d = np.diag(np.array([1, 2, 3, 4]))
d
Out[59]:
In [60]:
#Complex numbers
e = np.array([1+2j, 3+4j, 5+6*1j])
e
Out[60]:
In [61]:
#boolean
e = np.array([True, False, False, True])
e
Out[61]:
In [62]:
#String
f = np.array(['Bonjour', 'Hello', 'Hallo',])
f
Out[62]:
In [63]:
a = np.arange(10)
a
Out[63]:
In [64]:
# Slicing [comienzo:final:paso]
# Los tres no son necesarios explicitamente ya que por default comienzo=0, final=[-1] y el paso=1
a[2:8:2]
Out[64]:
In [65]:
a[::4] # solo cambiamos el paso
Out[65]:
In [66]:
np.random.seed(3)
a = np.random.random_integers(0, 20, 15)
a
Out[66]:
In [67]:
#pido una condicion a los elementos del array la salida es un nuevo array booleano
(a % 3 == 0)
Out[67]:
In [68]:
#puedo indexar y asignar con este array como mascara
mask = (a % 3 == 0)
a_multiplos_3 = a[mask]
a_multiplos_3
Out[68]:
In [69]:
#Puedo indexar y asignar al mismo tiempo
a[mask] = -1
a
Out[69]:
Las funciones se definen con la palabra reservada def, la estructura es la siguiente:
def nombre_funcion(parametro1, parametro2):
"""Docstring"""
operaciones
return objetos
In [38]:
def power(number, potencia):
"""Funcion para elevar a una potencia a un numero"""
return number**potencia
In [39]:
power(2+1j,10)
Out[39]:
Una funcion puede devolver varios valores, que los puedo encapsular en una tupla:
In [78]:
def ndarray_shape_type(ndarray):
rows, cols = ndarray.shape
return rows, cols, ndarray.sum()
In [79]:
a = np.random.random((3,3))
In [80]:
info = ndarray_shape_type(a)
info
Out[80]:
In [ ]: