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
El resultado de salida es:
int32
Ejemplo 2
El resultado de salida es:
int32
Ejemplo 3
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
El resultado de salida es:
[('age', 'i1')]
Ejemplo 5
El resultado de salida es:
[(10,) (20,) (30,)]
Ejemplo 6
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
El resultado de salida es:
[('name', 'S20'), ('age', 'i1'), ('marks', 'f4')]
Ejemplo 8
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 |
|---|---|
| b | Booleano |
| i | Entero (con signo) |
| u | Entero sin signo |
| f | Punto 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) |