Tipos de datos

3/24
Recursos

Aportes 20

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Para crear un array con un rango de datos podemos usar el método arange

np.arange(0,10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

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

ValueError: invalid literal for int() with base 10: 'hola'
  • np.float16 ahorra espacio en memoria (precisión media, exponente de 5 bits)
  • np.float_ hace lo mismo que float64 (precisión doble, exponente de 11 bits)

El array de numpy solo puede tener un único tipo de datos en el cual va a trabajar. No puedo tener la mitad del array en int y la otra mitad en bool.

Hola,esto es util, linspace y arange, parecen iguales pero no lo son. En linspace en el tercer valor indicamos la cantidad de valores que iran en el intervalo , ademas nótese que linspace SI incluye el segundo valor que se coloca (10 en este ejemplo). En arange en el tercer valor indicamos de cuanto en cuanto irán saltanto, aquí NO toma el ultimo valor ( segundo valor que se da, 10 en este caso).

Para cambiar los tipos de datos de manera sencilla o consultarlos:
• .dtype: Para poder saber cuál es el tipo de dato está usando el array
• .astype: Para poder cambiar el tipo de dato qué está usando el array

EJERCICIO: Parto de una matriz 3D numpy array y voy cambiando el tipo de dato. Usando la función de NUMPY NBYTES veo cómo varía el tamaño en bytes de la matriz cuando le cambio el tipo de dato.

  • Genero matriz 3D 3x3x3. Tipo de dato INT 64.
import numpy as np
npint64 = np.array([[[1,2,3], [4,5,6], [7,8,9]],[[11,12,13], [14,15,16],[17,18,19]],[[21,22,23], [24,25,26],[27,28,29]]])
npint64.dtype, npint64.nbytes

(dtype(‘int64’), 216)

  • Matriz con tipo de dato FLOAT 16 (Half precision float: sign bit, 5 bits exponent, 10 bits mantissa)
npfloat16 = npint64.astype(np.float16) 
npfloat16.dtype, npfloat16.nbytes  

(dtype(‘float16’), 54)

  • Matriz con tipo de dato FLOAT / SINGLE (Platform-defined single precision float: typically sign bit, 8 bits exponent, 23 bits mantissa)
npsingle = npint64.astype(np.single)  
npsingle.dtype, npsingle.nbytes  

(dtype(‘float32’), 108)

  • Matriz con tipo de dato DOUBLE (Platform-defined doubleprecisionfloat: typically sign bit, 11 bits exponent, 52 bits mantissa.)
npdouble = npint64.astype(np.double)  
npdouble.dtype, npdouble.nbytes 

(dtype(‘float64’), 216)

  • Matriz con tipo de dato DOUBLE COMPLEX (Complex number, represented by two double-precision floats (real and imaginary components)
npcdouble = npint64.astype(np.cdouble)  
npcdouble.dtype, npcdouble.nbytes 

(dtype(‘complex128’), 432)

¿Qué diferencia hay entre int64 o int32?

La diferencia es la capacidad que pueden almacenar, en muchos casos cuando tenemos grandes bases de datos, necesitamos que nuestro modelo sea lo más rápido posible y dependiendo del tipo de dato que tengamos, se tardará más o menos tiempo
Fuente

👾

Siento que acabo de adquirir un nuevo superpoder. Es maravilloso este curso.

El numero que tiene al final del dtype es el número de bits que se asignaran a cada elemento, así un float64 es una memoria de 64 bits asignada a cada item y que se tratará como un float. Esto es importante para cuestiones de presisión a más bits más información puedes guardar. Aquí un ejemplo de esto que saque de la documentación de Numpy

´´´
np.power(100, 8, dtype=np.int64) # Out: 10000000000000000
np.power(100, 8, dtype=np.int32) # Out: 1874919424
´´´

Es importante tener en cuenta esto porque puede que sea fuente de errores en tus cuentas si definiste que usarías 32 bits pero estás lidiando con datos que ameritarían usar 64 bits…

Los array solo pueden tener un único tipo de dato

Array = array.astype(np.float64) -> Cambiar a decimales
Array = array.astype(np.bool_)-> Cambiar a booleano
Array = array.astype(np.string_)-> Cambiar a texto string
Array = array.astype(np.int8_)-> Convierte números en formato texto a formato entero, resultará error de tener elementos con letras

use
.astype(np.str_)

y obtuve el array sin las b, min 5:35

VSC, virtual environment y numpy /

  • ImportError.
    -> sol: renombrar tu archivo.

Este curso se pone cada vez más interesante 😎🥇🚀

ty por el notebook

arr = np.array([‘0’,‘1’,‘2’,‘3’,‘4’])
arr = arr.astype(np.double)
arr

Otra alternativa para cambio de tipo de dato:

in: a = np.array([1,2,3,4], dtype='int64')
in: a = a.astype('float')
in: a.dtype
out: dtype('float64')

Aunque podemos cambiar el array a diferentes tipos de datos. Lo que no se puede es cambiar parcialmente el tipo de dato. Es decir, no podríamos tener la mitad del array con un tipo de dato, y el resto con algún otro.

  • Crear un array a partir de un rango asignadole el tipo de dato:
arr = np.arange(5, dtype = np.int8)
arr---> array([0, 1, 2, 3, 4])
  • Otra forma de asignar un tipo de dato a un array ya creado es:
np.float(arr)
arr---> array([0., 1., 2., 3., 4.])