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

Tipos de Dados do NumPy

Descrição e exemplo de tipo de dados NumPy

O tipo de dados, ou dtype, é também um objeto especial que contém informações sobre o bloco de memória que o ndarray precisa declarar para um tipo de dados específico (também conhecido como metadados, ou seja, dados sobre os dados) dtype é a razão pela qual o NumPy pode interagir flexivelmente com outros sistemas. Normalmente, outros sistemas fornecem uma relação entre um disco rígido ou memória e dados, tornando fácil usar linguagens de baixo nível como C ou Fortran para ler e escrever dados.

O NumPy suporta mais tipos de dados do que Tipos de dados nativos do Pythonmuito mais, praticamente correspondem aos tipos de dados do C, onde alguns tipos correspondem aos tipos nativos do Python. A tabela a seguir lista os tipos básicos comuns do NumPy.

NomeDescrição
int_Tipo de inteiro padrão (semelhante ao long no C, int32 ou int64)
int8Bytes (-128 até 127)
int16Inteiros (-32768 até 32767)
int32Inteiros (-2147483648 até 2147483647)
int64Inteiros (-9223372036854775808 até 9223372036854775807)
intcIgual ao tipo int do C, geralmente é int32 ou int 64
intpTipo de inteiro usado para índices (semelhante a ssize_t no C, geralmente é int32 ou int64)
uint8Inteiros sem sinal (0 a 255)
uint16Inteiros sem sinal (0 a 65535)
uint32Inteiros sem sinal (0 a 4294967295)
uint64Inteiros sem sinal (0 a 18446744073709551615)
float_float64 Abreviação do tipo
float16Ponto flutuante de precisão semi-simples, incluindo:1 dígitos de sinal5 dígitos de exponência10 dígitos decimais
float32Ponto flutuante de precisão simples, incluindo:1 dígitos de sinal8 dígitos de exponência23 dígitos decimais
float64Ponto flutuante de dupla precisão, incluindo:1 dígitos de sinal11 dígitos de exponência52 dígitos decimais
complex_complex128 Abreviação do tipo, ou seja 128 Números complexos de bits
complex64Números complexos, representando o dobro 32 Ponto flutuante de bits (parte real e parte imaginária)
complex128Números complexos, representando o dobro 64 Ponto flutuante de bits (parte real e parte imaginária)
bool_Tipo de dados booleano (True ou False)

Não importa se você não se lembra desses dtype do NumPy, especialmente para iniciantes. Geralmente, é suficiente saber que o tipo geral dos dados que você está lidando é ponto flutuante, número complexo, inteiro, valor booleano, string ou objeto Python. Quando você precisar controlar o modo de armazenamento dos dados em memória e disco (especialmente para conjuntos de dados grandes), você precisa saber como controlar o tipo de armazenamento.

Os tipos numéricos do numpy são instâncias do objeto dtype e correspondem a caracteres únicos, incluindo np.bool_, np.int32, np.float32etc.

Objeto tipo de dados (dtype)

O objeto tipo de dados é usado para descrever como a memória correspondente ao array é usada, o que depende dos seguintes aspectos:

Tipo de dados - Por exemplo, números de ponto flutuante, números complexos, inteiros, valores booleanos, strings ou objetos Python.Tamanho dos dados - Por exemplo, quantos bytes são usados para armazenar inteiros.A ordem dos bytes dos dados - Little-endian ou Big-endian

A ordem dos bytes é determinada pela pré-definição de "<" ou ">" para o tipo de dados. "<" significa little-endian (o menor valor é armazenado no menor endereço, ou seja, o grupo de baixos bits está na frente). ">" significa big-endian (o byte mais importante é armazenado no menor endereço, ou seja, o grupo de bits mais altos está na frente).

O objeto dtype é construído usando a seguinte sintaxe:

 numpy.dtype(object, align, copy)

object - 要转换为的数据类型对象align - 如果为 true,填充字段使其类似 C 的结构体。copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用

实例

接下来我们可以通过实例来理解。

>>> 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', '>> 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']) 
>>> 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])

O método astype pode explicitamente converter o tipo de dados do array, exemplo específico a seguir:

>>> 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')  # também pode ser escrito como arr.astype(np.float32)
>>> print(float_arr.dtype)
float32
>>> print(float_arr)
[1. 2. 3. 4. 5.]
Atenção:Conversão de array de strings de números para números é possível, quando o número é float, só pode ser convertido para float, não para int.

Você também pode usar o dtype de outro array para converter tipos de dados, conforme exemplo a seguir:

>>> 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 interno tem um código de caractere único que o define, conforme exemplo a seguir:

CaractereTipo Correspondente
bBooleano
iInteiro (Sinalizado)
uInteiro Sem Sinal integer
fFloat
cFloat de Número Complexo
mtimedelta (intervalo de tempo)
Mdatetime (data e hora)
O(Objeto) Python
S, a(byte-) String
UUnicode
VDados Originais (void)