English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tipos de datos de NumPy

Descripción y ejemplo de tipo de datos NumPy

El tipo de datos, o dtype, también es un objeto especial que contiene la información de los bloques de memoria que ndarray necesita declarar para un tipo de datos específico (también se conoce como metadatos, es decir, datos que representan datos) dtype es la razón por la que NumPy puede interactuar de manera flexible con otros sistemas. Por lo general, otros sistemas proporcionan una relación entre un disco duro o memoria y los datos, lo que hace que sea muy conveniente escribir y leer datos en lenguaje de bajo nivel como C o Fortran.

Los tipos de datos que admite numpy son más de Tipos de datos integrados de Pythonson muchos más, básicamente pueden corresponder a los tipos de datos del lenguaje C, entre los cuales algunos tipos corresponden a tipos integrados de Python. La tabla a continuación enumera los tipos básicos más comunes de NumPy.

NombreDescripción
int_Tipo de entero predeterminado (similar a long en el lenguaje C, int32 o int64)
int8Bytes (-128 a 127)
int16Enteros (-32768 a 32767)
int32Enteros (-2147483648 a 2147483647)
int64Enteros (-9223372036854775808 a 9223372036854775807)
intcIgual al tipo int de C, generalmente int32 o int 64
intpTipo de entero utilizado para índices (similar a ssize_t en C, generalmente int32 o int64)
uint8Enteros sin signo (0 a 255)
uint16Enteros sin signo (0 a 65535)
uint32Enteros sin signo (0 a 4294967295)
uint64Enteros sin signo (0 a 18446744073709551615)
float_float64 Abreviatura del tipo
float16Flotante de precisión media, incluyendo:1 posiciones de signo5 posiciones de exponente10 posiciones decimales
float32Flotante de precisión simple, incluyendo:1 posiciones de signo8 posiciones de exponente23 posiciones decimales
float64Flotante de doble precisión, incluyendo:1 posiciones de signo11 posiciones de exponente52 posiciones decimales
complex_complex128 Abreviatura del tipo, es decir 128 Números complejos de bits
complex64Números complejos, representando el doble 32 Números flotantes de bits (parte real y parte imaginaria)
complex128Números complejos, representando el doble 64 Números flotantes de bits (parte real y parte imaginaria)
bool_Tipo de datos booleano (True o False)

No es necesario recordar todos estos dtype de NumPy, especialmente para principiantes. Generalmente, solo se necesita saber el tipo general de los datos que se están procesando, ya sea flotante, complejo, entero, booleano, cadena o objeto Python. Cuando se necesita controlar el modo de almacenamiento de los datos en la memoria y el disco (especialmente para conjuntos de datos grandes), se debe entender cómo controlar el tipo de almacenamiento.

Los tipos de datos numéricos de numpy son instancias del objeto dtype y corresponden a caracteres únicos, incluyendo np.bool_, np.int32np.float32etcétera.

Objeto de tipo de datos (dtype)

El objeto de tipo de datos se utiliza para describir cómo se utiliza el área de memoria correspondiente al array, lo que depende de varios aspectos:

El tipo de datos - Por ejemplo, números flotantes, números complejos, enteros, valores booleanos, cadenas o objetos Python.El tamaño de los datos - Por ejemplo, cuántos bytes utiliza un entero.El orden de bytes de los datos - Little-endian o big-endian

El orden de bytes se determina mediante la predefinición de "<" o ">" para el tipo de datos. "<" significa método de little-endian (el valor más pequeño se almacena en la dirección más pequeña, es decir, los grupos más bajos se colocan al principio). ">" significa método de big-endian (los bytes más importantes se almacenan en la dirección más pequeña, es decir, los grupos más altos se colocan al principio).

El objeto dtype se construye utilizando la siguiente sintaxis:

 numpy.dtype(object, align, copy)

object - El objeto de tipo de datos a convertiralign - Si es true, rellena los campos para que sean similares a los estructuras de C.copy - Copiar el objeto dtype, si es false, es una referencia al objeto de tipo de datos integrado

Ejemplo

A continuación, podemos entenderlo a través de un ejemplo.

>>> import numpy as np
>>> a = np.dtype(np.float32)
>>> print(a)
float32
# int8, int16, int32, int64 Cuatro tipos de datos se pueden usar como cadenas 'i1', 'i2','i4','i8'' en lugar de 
>>> import numpy as np
>>> a = np.dtype('i8')]
>>> print(a)
int64

El siguiente ejemplo muestra el uso del tipo de datos estructurado, se crean los campos de tipo y los tipos reales correspondientes.

>>> import numpy as np
>>> a = np.dtype([('number', np.int16)]  # El tipo de datos se aplica a un objeto ndarray 
>>> print(a)
[('number', '<i2'])
>>> arr = np.array([(1([2([3([
>>> print(arr)
,)1,)2,)3>>> print(arr['number'])  # El nombre del campo de tipo se puede usar para acceder a la columna real number
El siguiente ejemplo define un tipo de datos estructurado animal, que contiene el campo de cadena name, el campo de entero age y el campo de flotante marks, y aplica este dtype a un objeto ndarray.
[1 2 3]

>>> animal = np.dtype([('name','S

>>> import numpy as np
21'), ('marks', '4''))
>>> print(animal)
21'), ('marks', '
                                <f4']) 
>>> a = np.array([('cat', 5, 10)), ('dog', 4, 35)), ('lion',8,18]), dtype = animal
>>> print(a)
[(b'cat', 5, 10). (b'dog', 4, 35). (b'lion', 8, 18])

El método astype puede convertir explícitamente el tipo de datos de un array, ejemplo específico a continuación:

>>> import numpy as np
>>> arr = np.array([1,2,3,4,5])
>>> print(arr.dtype)
int64
>>> print(arr)
[1 2 3 4 5]
>>> float_arr = arr.astype('float32')  # también se puede escribir arr.astype(np.float32)
>>> print(float_arr.dtype)
float32
>>> print(float_arr)
[1. 2. 3. 4. 5.]
Nota:Es posible convertir un array de cadenas de números en números, pero cuando los números son flotantes, solo se puede convertir a float, no a int.

También se puede convertir el tipo de datos de otro array dtype, como se muestra en el siguiente ejemplo:

>>> import numpy as np
>>> int_arr = np.arange(10)
>>> calibers = np.array([.22, .270, .357], dtype=np.float64)
>>> print(calibers)
[0.22 0.27 0.357]
>>> arr_last = int_arr.astype(calibers.dtype)
>>> print(arr_last.dtype)
float64
>>> print(arr_last)
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

Cada tipo integrado tiene un código de carácter único que lo define, como se muestra a continuación:

CarácterTipo correspondiente
bBooleano
iEntero (con signo)
uEntero sin signo integer
fFlotante
cFlotante complejo
mtimedelta (intervalo de tiempo)
Mdatetime (fecha y hora)
O(Objeto) Python
S, a(byte-)Cadena
UUnicode
VDatos originales (void)