Apuntes de Numpy y Pandas
Apuntes de Numpy y Pandas
arr = np.array(lista)
type(arr)
---> numpy.ndarray
Tipos de datos
Los arrays de NumPy solo pueden contener un tipo de dato, ya que esto es lo que le confiere
las ventajas de la optimización de memoria.
Podemos conocer el tipo de datos del array consultando la propiedad .dtype.
arr = np.array([1, 2, 3, 4])
arr.dtype
---> dtype('int64')
Si queremos usar otro tipo de dato lo podemos definir en la declaración del array.
arr = np.array([1, 2, 3, 4], dtype = 'float64')
arr.dtype
---> dtype('float64')
Ahora vemos que los valores están con punto decimal.
arr
---> array([1., 2., 3., 4.])
Si ya se tiene el array definido se usa el método .astype() para convertir el tipo de dato.
arr = np.array([1, 2, 3, 4])
arr = arr.astype(np.float64)
arr
---> array([1., 2., 3., 4.])
También se puede cambiar a tipo booleano recordando que los números diferentes de 0 se
convierten en True.
arr = np.array([0, 1, 2, 3, 4])
arr = arr.astype(np.bool_)
arr
---> array([False, True, True, True, True])
También podemos convertir los datos en tipo string.
arr = np.array([0, 1, 2, 3, 4])
arr = arr.astype(np.string_)
arr
---> array([b'0', b'1', b'2', b'3', b'4'], dtype='|S21')
De igual forma se puede pasar de string a numero.
arr = np.array(['0', '1', '2', '3', '4'])
arr = arr.astype(np.int8)
arr
---> array([0, 1, 2, 3, 4], dtype=int8)
Si un elemento no es de tipo número el método falla.
arr = np.array(['hola','0', '1', '2', '3', '4'])
arr = arr.astype(np.int8)
arr
----------------------------------------------------------------------
-----
ValueError Traceback (most recent call
last)
<ipython-input-30-b9bb95861c7b> in <module>()
1 # DSi un elemento no es de tipo número el método falla.
2 arr = np.array(['hola','0', '1', '2', '3', '4'])
----> 3 arr = arr.astype(np.int8)
4 arr
Para crear un array con un rango de datos podemos usar el método arange
np.arange(0,10)
Dimensiones
[[13 13 15]
[16 17 18]
[19 20 21]
[22 23 24]]]
----> 3
Agregar o eliminar dimensiones
Se puede definir el número de dimensiones desde la declaración del array
vector = np.array([1, 2, 3], ndmin = 10)
print(vector) ----> [[[[[[[[[[1 2 3]]]]]]]]]]
vector.ndim ----> 10
Se pueden expandir dimensiones a los array ya existentes.
Axis = 0 hace refencia a las filas, mientras que axis = 1 a las columnas.
expand = np.expand_dims(np.array([1, 2, 3]), axis = 0)
print(expand) ----> [[1 2 3]]
expand.ndim ----> 2
Remover/comprimir las dimensiones que no están siendo usadas.
print(vector, vector.ndim) ----> [[[[[[[[[[1 2 3]]]]]]]]]] 10
vector_2 = np.squeeze(vector)
print(vector_2, vector_2.ndim) ----> [1 2 3] 1
Reto
1. Definir un tensor de 5 dimensiones
2. Sumar una dimensión en algún eje
3. Borrar dimensiones que no se usen
1.
tensor5 = np.array([[[[1, 2],[3, 4]], [[5, 6],[7, 8]]], [[[1, 2],[3,
4]], [[5, 6],[7, 8]]]], ndmin = 5)
print(tensor5, tensor5.ndim)
[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]] 5
1.
expand5 = np.expand_dims(tensor5, axis=1)
print(expand5, expand5.ndim)
[[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]]] 6
1.
print(expand5, expand5.ndim)
reduced5 = np.squeeze(expand5)
print(reduced5, reduced5.ndim)
[[[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]]]] 6
[[[[1 2]
[3 4]]
[[5 6]
[7 8]]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]] 4
Creando Arrays
1 ✅ np.arange (Start,Ens,Steps) → es como el list( range(0,10)) pero como arrange
2 ✅ np.zeros(n)
3 ✅ np.ones(n)
4 ✅ np.linspace(Start, End, Cant n de Start a End)
5 ✅ np.eye(n) ·· Matriz identidad
Arrays con numeros randoms
☑️np.random.rand(Filas,Columnas, mas dimensiones ) ·· Ambos con numeros randoms
☑️np.random.randint(Start, End, Dimensiones) ·· N random entre Start y End y tupla dims
🟦🔹Shape y Reshape
Shape me indica la forma del arreglo
Reshape transforma el arreglo mientras se mantengan los elementos.
arr = np.random.randint(1,10,(3,2))
arr.shape
----> (3, 2)
arr
----> array([[4, 2],
[4, 8],
[4, 3]])
arr.reshape(1,6)
----> array([[4, 2, 4, 8, 4, 3]])
arr.reshape(2,3)
----> array([[4, 2, 4],
[8, 4, 3]])
np.reshape(arr,(1,6))
----> array([[4, 2, 4, 8, 4, 3]])
Se puede hacer un reshape como lo haría C.
np.reshape(arr,(2,3), 'C')
----> array([[4, 2, 4],
[8, 4, 3]])
También se puede hacer reshape a como lo haría Fortran.
np.reshape(arr,(2,3), 'F')
----> array([[4, 4, 8],
[4, 2, 3]])
Además existe la opción de hacer reshape según como esté optimizado nuestro computador.
En este caso es como en C.
np.reshape(arr,(2,3), 'A')
----> array([[4, 2, 4],
[8, 4, 3]])
Reto
Crear un array de cualquier dimesnión y cambiar sus dimensiones
Intentar cambiar el array de forma que no respete la estructura original
1.
No puedes cambiar la "forma" a la "forma" original del array, si tienes un (3,3) no lo puedes pasar
a (4,2).
print('Generando la matriz...')
arr_reto = np.random.randint(1,100,(4,6))
print()
print('Intercambiando las dimensiones + ajuste dimensiones')
print('A')
print()
print('B')
print()
# np.reshape(objeto_NumPy,(filas,columnas))
arr_tipo_c = np.reshape(arr,(3,4),"C")
arr_tipo_f = np.reshape(arr,(3,4),"F")
print("el objeto modificado 3X4 de forma del lenguje Fortran es:","\n",arr_tipo_f,"\n")
arr_tipo_optimizacion = np.reshape(arr,(3,4),"A")
RETO CUMPLIDO!
array.reshape(4,3)
----> array([[10, 90, 33],
[94, 24, 4],
[90, 39, 67],
[46, 53, 45]])
array.reshape(3,4)
----> array([[10, 90, 33, 94],
[24, 4, 90, 39],
[67, 46, 53, 45]])
-Cambie las dimensiones del array de manera que sobrepase el numero de elementos que
contiene
array.reshape(4,4)
-----> ValueError: cannot reshape array of size 12 into shape (4,4)
ValueError: all the input arrays must have same number of dimensions,
but the array at index 0 has 2 dimension(s) and the array at index 1
has 1 dimension(s)
El error anterior es debido a a tiene 2 dimensiones mientras que b tiene 1.
print(a.ndim) ----> 2
b.ndim ----> 1
b = np.expand_dims(b, axis = 0)
np.concatenate((a,b), axis = 0)
----> array([[1, 2],
[3, 4],
[5, 6]])
De igual forma podemos agregarlo en el otro eje
np.concatenate((a,b), axis = 1)
-----------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-217-3ae7237876ab> in <module>()
1 # De igual forma podemos agregarlo en el otro eje
----> 2 np.concatenate((a,b), axis = 1)
ValueError: all the input array dimensions for the concatenation axis
must match exactly, but along dimension 0, the array at index 0 has
size 2 and the array at index 1 has size 1
Como b es una fila y no una columna, no se puede concatenar a menos que se aplique la
transpuesta.
np.concatenate((a,b.T), axis = 1)
----> array([[1, 2, 5],
[3, 4, 6]])