English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spiegazione e esempio dei tipi di dati NumPy
il tipo di dati, noto anche come dtype, è anche un oggetto speciale che contiene le informazioni sui blocchi di memoria che ndarray deve dichiarare per un tipo di dati specifico (noto anche come metadati, che rappresentano i dati dei dati). Il dtype è il motivo per cui NumPy può interagire in modo flessibile con altri sistemi di dati. Di solito, altri sistemi forniscono una corrispondenza tra disco o memoria e dati, rendendo molto facile leggere e scrivere dati utilizzando linguaggi di basso livello come C o Fortran.
i tipi di dati supportati da NumPy sono più di tipi di dati integrati di Pythonci sono molti di più, praticamente corrispondenti ai tipi di dati del linguaggio C, tra cui alcune tipologie corrispondono ai tipi di dati integrati di Python. La tabella seguente elenca i tipi di dati di base di NumPy più comuni.
nome | descrizione |
int_ | tipo intero predefinito (simile a long in C, int32 o int64) |
int8 | byte (da -128 a 127) |
int16 | intero (da -32768 a 32767) |
int32 | intero (da -2147483648 a 2147483647) |
int64 | intero (da -9223372036854775808 a 9223372036854775807) |
intc | uguale al tipo int di C, di solito int32 o int64 |
intp | intero utilizzato per l'indicizzazione (simile a ssize_t in C, di solito int32 o int64) |
uint8 | intero unsigned (da 0 a 255) |
uint16 | intero unsigned (da 0 a 65535) |
uint32 | Interi unsigned (da 0 a 4294967295) |
uint64 | Interi unsigned (da 0 a 18446744073709551615) |
float_ | Sintassi abbreviata di float64 |
float16 | Numeri floating point a semi precisione, inclusi: 1 bit di segno, 5 bit di esponente, 10 bit di parte significativa |
float32 | Numeri floating point a singola precisione, inclusi: 1 bit di segno, 8 bit di esponente, 23 bit di parte significativa |
float64 | Numeri floating point a doppia precisione, inclusi: 1 bit di segno, 11 bit di esponente, 52 bit di parte significativa |
complex_ | Sintassi abbreviata di complex128, ossia 128 bit complessi |
complex64 | Numeri complessi, rappresentati da 32 bit floating point (parte reale e parte immaginaria) |
complex128 | Numeri complessi, rappresentati da 64 bit floating point (parte reale e parte immaginaria) |
bool_ | Tipo di dati booleano (True o False) |
Non c'è bisogno di ricordare questi dtype di NumPy, specialmente per i principianti. Di solito è sufficiente sapere che il tipo di dati che si sta elaborando è un numero floating point, un numero complesso, un numero intero, un valore booleano, una stringa o un oggetto Python. Quando si ha bisogno di controllare il modo in cui i dati vengono memorizzati in memoria e su disco (soprattutto per set di dati grandi), allora è necessario sapere come controllare il tipo di memorizzazione.
I tipi numerici di numpy sono in realtà istanze di oggetti dtype e corrispondono a caratteri unici, inclusi np.bool_, np.int32, np.float32, ecc.
Gli oggetti di tipo dati sono usati per descrivere come viene utilizzato lo spazio in memoria dell'array corrispondente, il che dipende dai seguenti aspetti:
Il tipo dei dati - Ad esempio, numeri floating point, numeri complessi, numeri interi, valori booleani, stringhe o oggetti Python.La dimensione dei dati - Ad esempio, quante byte utilizza un intero.L'ordine dei byte dei dati - Piccolo endian o grande endian
L'ordine dei byte è determinato dalla predefinizione dei tipi di dati "<" o ">". "<" significa piccolo endian (valore minore memorizzato all'indirizzo più piccolo, ovvero i gruppi di bit più bassi in posizione iniziale). ">" significa grande endian (i byte più importanti memorizzati all'indirizzo più piccolo, ovvero i gruppi di bit più alti in posizione iniziale).
Gli oggetti dtype sono costruiti con la seguente sintassi:
numpy.dtype(object, align, copy)
object - L'oggetto di tipo dati da convertirealign - Se true, riempie i campi in modo simile ai strutture di dati C.copy - Copia l'oggetto dtype, se false è un riferimento all'oggetto di tipo dati integrato.
Di seguito possiamo comprendere attraverso un esempio.
>>> import numpy as np >>> a = np.dtype(np.float32) >>> print(a) float32
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替 >>> import numpy as np >>> a = np.dtype('i8') >>> print(a) int64
下面实例展示结构化数据类型的使用,类型字段和对应的实际类型将被创建。
>>> import numpy as np >>> a = np.dtype([('number',np.int16)]) # 数据类型应用于 ndarray 对象 >>> print(a) [('number', '<i2')] >>> arr = np.array([(1,),(2,),(3,)], dtype = a) >>> print(arr) [(1,) (2,) (3,)] >>> print(arr['number']) # 类型字段名可以用于存取实际的 number 列 [1 2 3]
下面的示例定义一个结构化数据类型animal,包含字符串字段 name,整数字段 age,及浮点字段 marks,并将这个 dtype 应用到 ndarray 对象。
>>> import numpy as np >>> animal = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')]) >>> print(animal) [('name', 'S20'), ('age', 'i1'), ('marks', 'f4')] <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.)]
使用astype方法可以显式的转换数组的数据类型,具体实例如下:
>>> 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') # 也以写作 arr.astype(np.float32) >>> print(float_arr.dtype) float32 >>> print(float_arr) [1. 2. 3. 4. 5.]
È possibile convertire i tipi di dati di altri array dtype, come nell'esempio seguente:
>>> 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.]
Ogni tipo inbuild ha un codice carattere univoco che lo definisce, come segue:
Carattere | Tipo corrispondente |
b | Booleano |
i | Entero (con signo) integer |
u | Entero sin signo integer |
f | Punto flotante |
c | Complejo de punto flotante |
m | timedelta (intervallo di tempo) |
M | datetime (data e ora) |
O | Oggetto (Python) |
S, a | (stringa bytecode-) |
U | Unicode |
V | Dati originali (void) |