7 min de leitura
#3 - Tipos de dados no NumPy
Introdução sobre os tipos de dados no Numpy.
O NumPy suporta uma variedade muito maior de tipos numéricos do que o Python. A tabela a seguir mostra os diferentes tipos de dados escalares definidos no NumPy.
Nº | Tipos de Dados & Descrição |
---|---|
1 | bool_ Booleano (Verdadeiro ou Falso) armazenado como um byte |
2 | int_ Tipo inteiro padrão (igual o long no C; normalmente int64 ou int32) |
3 | intc Idêntico o int do C (normalmente int32 ou int64) |
4 | intp Inteiro usado para indexação (o mesmo que C ssize_t; normalmente, int32 ou int64) |
5 | int8 Byte (-128 to 127) |
6 | int16 Inteiro (-32768 to 32767) |
7 | int32 Inteiro (-2147483648 to 2147483647) |
8 | int64 Inteiro (-9223372036854775808 to 9223372036854775807) |
9 | uint8 Unsigned integer (0 to 255) |
10 | uint16 Inteiro não assinado (0 to 65535) |
11 | uint32 Inteiro não assinado (0 to 4294967295) |
12 | uint64 Inteiro não assinado (0 to 18446744073709551615) |
13 | float_ Taquigrafia para float64 |
14 | float16 Half precision float: sign bit, 5 bits exponent, 10 bits mantissa |
15 | float32 Single precision float: sign bit, 8 bits exponent, 23 bits mantissa |
16 | float64 Double precision float: sign bit, 11 bits exponent, 52 bits mantissa |
17 | complex_ Taquigrafia para complex128 |
18 | complex64 Número complexo, representado por dois floats de 32 bits (componentes reais e imaginários) |
19 | complex128 Número complexo, representado por dois floats de 64 bits (componentes reais e imaginários) |
Os tipos numéricos NumPy são instâncias de objetos dtype (tipo de dados), cada um com características únicas. Os tipos estão disponíveis como np.bool_, np.float32, etc.
Objetos de tipo de dados (dtype)
Um objeto de tipo de dados descreve a interpretação do bloco fixo de memória correspondente a uma matriz, dependendo dos seguintes aspectos -
-
Tipo de dados (número inteiro, objeto flutuante ou objeto Python)
-
Tamanho dos dados
-
Ordem de bytes (little-endian ou big-endian)
-
No caso de tipo estruturado, os nomes dos campos, o tipo de dados de cada campo e parte do bloco de memória utilizado por cada campo.
-
Se o tipo de dados for uma sub-matriz, sua forma e tipo de dados
A ordem dos bytes é decidida prefixando ‘<’ ou ‘>’ para o tipo de dados. ‘<’ significa que a codificação é little-endian (menos significativa é armazenada no menor endereço). ‘>’ significa que a codificação é big-endian (o byte mais significativo é armazenado no menor endereço).
Um objeto dtype é construído usando a seguinte sintaxe -
numpy.dtype(object, align, copy)
Os parâmetros são -
-
object - Para ser convertido em objeto de tipo de dados
-
align - Se verdadeiro, adiciona preenchimento ao campo para torná-lo semelhante ao C-struct
-
copy - Faz uma nova cópia do objeto dtype. Se falso, o resultado é referência ao objeto de tipo de dados interno
Exemplo 1
# usando o tipo array-scalar
import numpy as np
dt = np.dtype(np.int32)
print dt
A saída é a seguinte -
int32
Exemplo 2
#int8, int16, int32, int64 podem ser substituidos pela string equivalente a 'i1', 'i2','i4', etc.
import numpy as np
dt = np.dtype('i4')
print dt
A saída é a seguinte -
int32
Exemplo 3
# utilizando a notação endian
import numpy as np
dt = np.dtype('>i4')
print dt
A saída é a seguinte -
>i4
Os exemplos a seguir mostram o uso do tipo de dados estruturado. Aqui, o nome do campo e o tipo de dados escalar correspondente devem ser declarados.
Exemplo 4
# primeiro crie um tipo de dados estruturado
import numpy as np
dt = np.dtype([('age',np.int8)])
print dt
A saída é a seguinte -
[('age', 'i1')]
Exemplo 5
# agora aplique-o ao objeto ndarray
import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a
A saída é a seguinte -
[(10,) (20,) (30,)]
Exemplo 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']
A saída é a seguinte -
[10 20 30]
Exemplo 7
Os exemplos a seguir definem um tipo de dados estruturado chamado aluno com um campo de cadeia ‘nome’, um campo inteiro ‘idade’ e um campo float ‘marcas’. Este dtype é aplicado ao objeto ndarray.
import numpy as np
aluno = np.dtype([('nome','S20'), ('idade', 'i1'), ('marcas', 'f4')])
print student
A saída é a seguinte -
[('nome', 'S20'), ('idade', 'i1'), ('marcas', '<f4')])
Exemplo 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
A saída é a seguinte -
[('abc', 21, 50.0), ('xyz', 18, 75.0)]
Cada tipo de dados interno possui um código de caractere que o identifica exclusivamente.
-
‘b’ - booleano
-
‘i’ - inteiro (assinado)
-
‘u’ - número inteiro não assinado
-
‘f’ - ponto flutuante
-
‘c’ - ponto flutuante complexo
-
‘m’ - timedelta
-
‘M’ - data e hora
-
‘O’ - objeto (Python)
-
‘S’, ‘a’ - (byte-)string
-
‘U’ - unicode
-
‘V’ - dados brutos (raw data) (sem valor)
Fonte traduzida com adaptações: NumPy - Data Types
Comentários