Tipos de datos NumPy

Los tipos de datos admitidos por numpy son muchos más que los tipos integrados de Python y básicamente pueden corresponder a los tipos de datos del lenguaje C, algunos de los cuales se corresponden con los tipos integrados de Python. La siguiente tabla enumera los tipos básicos comunes de NumPy.

Nombre Descripción
bool_ Tipo de dato booleano (True o False)
int_ Tipo de entero predeterminado (similar a long en C, int32 o int64)
intc Igual que el tipo int de C, generalmente int32 o int64
intp Tipo de entero para indexación (similar a ssize_t de C, generalmente sigue siendo int32 o int64)
int8 Byte (-128 a 127)
int16 Entero (-32768 a 32767)
int32 Entero (-2147483648 a 2147483647)
int64 Entero (-9223372036854775808 a 9223372036854775807)
uint8 Entero sin signo (0 a 255)
uint16 Entero sin signo (0 a 65535)
uint32 Entero sin signo (0 a 4294967295)
uint64 Entero sin signo (0 a 18446744073709551615)
float_ Abreviatura del tipo float64
float16 Número de punto flotante de media precisión, que incluye: 1 bit de signo, 5 bits de exponente, 10 bits de mantisa
float32 Número de punto flotante de precisión simple, que incluye: 1 bit de signo, 8 bits de exponente, 23 bits de mantisa
float64 Número de punto flotante de doble precisión, que incluye: 1 bit de signo, 11 bits de exponente, 52 bits de mantisa
complex_ Abreviatura del tipo complex128, es decir, número complejo de 128 bits
complex64 Número complejo, representado por dos flotantes de 32 bits (parte real y parte imaginaria)
complex128 Número complejo, representado por dos flotantes de 64 bits (parte real y parte imaginaria)

Los tipos numéricos de numpy son en realidad instancias de objetos dtype y corresponden a caracteres únicos, incluyendo np.bool_, np.int32, np.float32, etc.


Objeto de tipo de datos (dtype)

El objeto de tipo de datos (instancia de la clase numpy.dtype) se utiliza para describir cómo se usa el área de memoria correspondiente al array. Describe los siguientes aspectos de los datos:

  • El tipo de los datos (entero, punto flotante o objeto de Python)
  • El tamaño de los datos (por ejemplo, cuántos bytes se utilizan para almacenar un entero)
  • El orden de bytes de los datos (little-endian o big-endian)
  • En el caso de tipos estructurados, los nombres de los campos, el tipo de datos de cada campo y la parte del bloque de memoria que ocupa cada campo
  • Si el tipo de datos es un subarray, cuál es su forma y tipo de datos.

El orden de bytes se determina mediante un prefijo<o>establecido en el tipo de datos.<significa little-endian (el valor mínimo se almacena en la dirección más pequeña, es decir, el byte menos significativo se coloca primero).>significa big-endian (el byte más significativo se almacena en la dirección más pequeña, es decir, el byte más significativo se coloca primero).

El objeto dtype se construye con la siguiente sintaxis:

numpy.dtype(object, align, copy)
  • object - el objeto de tipo de datos al que se va a convertir
  • align - si es true, rellena los campos para que se asemejen a una estructura de C.
  • copy - copia el objeto dtype; si es false, es una referencia al objeto de tipo de datos integrado.

Ejemplos

A continuación podemos entenderlo mediante ejemplos.

Ejemplo 1

import numpy as np # Usar tipos escalares dt = np.dtype(np.int32) print(dt)

El resultado de salida es:

int32

Ejemplo 2

import numpy as np # Los cuatro tipos de datos int8, int16, int32, int64 se pueden reemplazar por las cadenas 'i1', 'i2', 'i4', 'i8' dt = np.dtype('i4') print(dt)

El resultado de salida es:

int32

Ejemplo 3

import numpy as np # Notación del orden de bytes dt = np.dtype('<i4') print(dt)

El resultado de salida es:

int32

El siguiente ejemplo muestra el uso de tipos de datos estructurados; se crearán los campos de tipo y los tipos reales correspondientes.

Ejemplo 4

# Primero se crea el tipo de datos estructurado import numpy as np dt = np.dtype([('age',np.int8)]) print(dt)

El resultado de salida es:

[('age', 'i1')]

Ejemplo 5

# Aplicar el tipo de datos al objeto ndarray import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a)

El resultado de salida es:

[(10,) (20,) (30,)]

Ejemplo 6

# El nombre del campo de tipo se puede utilizar para acceder a la columna age real import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),(20,),(30,)], dtype = dt) print(a['age'])

El resultado de salida es:

[10 20 30]

El siguiente ejemplo define un tipo de datos estructurado student, que contiene un campo de cadena name, un campo entero age y un campo de punto flotante marks, y aplica este dtype a un objeto ndarray.

Ejemplo 7

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) print(student)

El resultado de salida es:

[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]

Ejemplo 8

import numpy as np student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student) print(a)

El resultado de salida es:

[(b'abc', 21, 50.) (b'xyz', 18, 75.)]

Cada tipo integrado tiene un código de carácter único que lo define, como sigue:

Carácter Tipo correspondiente
bBooleano
iEntero (con signo)
u Entero sin signo
fPunto flotante
c Punto flotante complejo
m timedelta (intervalo de tiempo)
M datetime (fecha y hora)
O Objeto (Python)
S, a Cadena (byte)
U Unicode
V Datos sin procesar (void)
Otras extensiones