NumPy - Tipos de datos
NumPy admite una variedad mucho mayor de tipos numéricos que Python. La siguiente tabla muestra diferentes tipos de datos escalares definidos en NumPy.
No Señor. | Tipos de datos y descripción |
---|---|
1 | bool_ Booleano (verdadero o falso) almacenado como un byte |
2 | int_ Tipo de entero predeterminado (igual que C long; normalmente int64 o int32) |
3 | intc Idéntico a C int (normalmente int32 o int64) |
4 | intp Número entero utilizado para la indexación (igual que C ssize_t; normalmente int32 o int64) |
5 | int8 Byte (de -128 a 127) |
6 | int16 Entero (-32768 a 32767) |
7 | int32 Entero (-2147483648 a 2147483647) |
8 | int64 Entero (-9223372036854775808 a 9223372036854775807) |
9 | uint8 Entero sin signo (0 a 255) |
10 | uint16 Entero sin signo (0 a 65535) |
11 | uint32 Entero sin signo (0 a 4294967295) |
12 | uint64 Entero sin signo (0 a 18446744073709551615) |
13 | float_ Taquigrafía de float64 |
14 | float16 Flotante de media precisión: bit de signo, exponente de 5 bits, mantisa de 10 bits |
15 | float32 Flotador de precisión simple: bit de signo, exponente de 8 bits, mantisa de 23 bits |
dieciséis | float64 Flotante de doble precisión: bit de signo, exponente de 11 bits, mantisa de 52 bits |
17 | complex_ Taquigrafía para complex128 |
18 | complex64 Número complejo, representado por dos flotantes de 32 bits (componentes reales e imaginarios) |
19 | complex128 Número complejo, representado por dos flotantes de 64 bits (componentes reales e imaginarios) |
Los tipos numéricos NumPy son instancias de objetos dtype (tipo de datos), cada uno con características únicas. Los dtypes están disponibles como np.bool_, np.float32, etc.
Objetos de tipo de datos (dtype)
Un objeto de tipo de datos describe la interpretación de un bloque fijo de memoria correspondiente a una matriz, según los siguientes aspectos:
Tipo de datos (entero, flotante o objeto Python)
Tamaño de los datos
Orden de bytes (little-endian o big-endian)
En el caso del tipo estructurado, los nombres de los campos, el tipo de datos de cada campo y parte del bloque de memoria que ocupa cada campo.
Si el tipo de datos es un subarreglo, su forma y tipo de datos
El orden de los bytes se decide anteponiendo '<' o '>' al tipo de datos. '<' significa que la codificación es little-endian (la menos significativa se almacena en la dirección más pequeña). '>' significa que la codificación es big-endian (el byte más significativo se almacena en la dirección más pequeña).
Un objeto dtype se construye utilizando la siguiente sintaxis:
numpy.dtype(object, align, copy)
Los parámetros son:
Object - Para convertir a objeto de tipo de datos
Align - Si es verdadero, agrega relleno al campo para hacerlo similar a C-struct
Copy- Hace una nueva copia del objeto dtype. Si es falso, el resultado es una referencia al objeto de tipo de datos incorporado
Ejemplo 1
# using array-scalar type
import numpy as np
dt = np.dtype(np.int32)
print dt
La salida es la siguiente:
int32
Ejemplo 2
#int8, int16, int32, int64 can be replaced by equivalent string 'i1', 'i2','i4', etc.
import numpy as np
dt = np.dtype('i4')
print dt
La salida es la siguiente:
int32
Ejemplo 3
# using endian notation
import numpy as np
dt = np.dtype('>i4')
print dt
La salida es la siguiente:
>i4
Los siguientes ejemplos muestran el uso del tipo de datos estructurados. Aquí, se declarará el nombre del campo y el tipo de datos escalares correspondiente.
Ejemplo 4
# first create structured data type
import numpy as np
dt = np.dtype([('age',np.int8)])
print dt
La salida es la siguiente:
[('age', 'i1')]
Ejemplo 5
# now apply it to ndarray object
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a
La salida es la siguiente:
[(10,) (20,) (30,)]
Ejemplo 6
# file name can be used to access content of age column
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a['age']
La salida es la siguiente:
[10 20 30]
Ejemplo 7
Los siguientes ejemplos definen un tipo de datos estructurado llamado student con un campo de cadena 'nombre', un integer field 'edad' y una float field'marcas'. Este dtype se aplica al objeto ndarray.
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print student
La salida es la siguiente:
[('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
La salida es la siguiente:
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
Cada tipo de datos incorporado tiene un código de carácter que lo identifica de forma única.
'b' - booleano
'i' - entero (con signo)
'u' - entero sin signo
'f' - punto flotante
'c' - punto flotante complejo
'm' - timedelta
'M' - fecha y hora
'O' - (Python) objetos
'S', 'a' - (byte-) cadena
'U' - Unicode
'V' - datos brutos (nulos)