A respeito da biblioteca Numpy, julgue o item a seguir. impo...
import numpy as np a = np.array([(1, 2), (3, 4), (5, 6)], dtype=[('x', 'i4'), ('y', 'i4')]) print(a) print(a.shape)
O resultado da execução do código Python apresentado anteriormente é o que se segue.
[[1 2] [3 4] [5 6] ['x','i4'] ['y','i4']] (3, 2)
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: E - Errado
Vamos analisar o código apresentado e entender por que a alternativa correta é "Errado". O código está utilizando a biblioteca Numpy, que é uma biblioteca muito poderosa para a manipulação de arrays e matrizes em Python, fornecendo uma grande quantidade de funções matemáticas úteis para operações com esses arrays.
No código, é criado um array estruturado com o uso de dtype
, especificando que o array terá duas colunas nomeadas 'x' e 'y', ambas contendo elementos do tipo inteiro de 4 bytes ('i4'
). O array é inicializado com três linhas de pares de números. Ao imprimir o array a
, o resultado esperado é mostrar esses pares no formato de um array estruturado, e não uma lista contendo os elementos e os tipos de dados como mostrado na questão.
Além disso, ao imprimir a.shape
, o resultado esperado é a tupla (3,)
, indicando que o array possui 3 elementos no nível mais alto, pois cada elemento do array estruturado é composto por um conjunto de pares ('x', 'y'). Portanto, a saída do código apresentado seria algo parecido com o seguinte:
[(1, 2) (3, 4) (5, 6)] (3,)
Porém, a saída fornecida na questão mostra uma matriz 3x2 seguida pela representação dos tipos de dados, o que está incorreto. Este resultado seria esperado se o array fosse um array simples (non-structured) em Numpy, e não um array estruturado como foi definido pelo dtype
com nomes de campos.
Portanto, o gabarito "E - Errado" é o correto, pois a saída mostrada no enunciado não condiz com o comportamento esperado do código apresentado, quando utilizando a biblioteca Numpy.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
[(1, 2) (3, 4) (5, 6)]
(3,)
O código cria uma matriz NumPy com um tipo de dado estruturado, onde cada elemento é uma tupla com campos 'x' e 'y', ambos representando inteiros de 32 bits. A matriz contém três dessas tuplas e a forma da matriz é (3,).
Essa questão foi retirada da documentação de Numpy, fonte primária das questões da Cespe sobre este assunto: https://numpy.org/doc/stable/reference/generated/numpy.shape.html
Explicação passo a passo deste código:
A primeira coisa que você precisa entender é que inicialmente estamos criando uma matriz multidimensional a usando np.array:
a = np.array([(1, 2), (3, 4), (5, 6)])
O resultado dessa execução será a seguinte:
[[(1, 2), <- Linha 1
(3, 4), <- Linha 2
(5, 6)]] <- Linha 3
Ao inserir o comando dtype=[('x', 'i4'), ('y', 'i4')]) , estamos simplesmente definindo dois campos para cada linha, onde 'i4' representa um inteiro de 32 bits e 'x' e 'y' são os nomes dos campos dentro do tipo de dados estruturado.
Podemos visualizar essa operação da seguinte forma:
Linha 1:
'x': 1
'y': 2
Linha 2:
'x': 3
'y': 4
Linha 3:
'x': 5
'y': 6
Executando, então, o trecho a = np.array([(1, 2), (3, 4), (5, 6)], dtype=[('x', 'i4'), ('y', 'i4')]) e imprimindo (print(a)) teremos a saída:
[(1, 2), (3, 4), (5, 6)]
Observação: Apesar de parecer uma única linha, na verdade são três tuplas dentro da matriz, como originalmente definido. O que acontece é que o NumPy tem uma representação visual compacta para matrizes pequenas, exibindo os elementos entre parênteses e separados por espaços, sem quebra de linha entre eles.
A segunda parte da resolução dessa questão envolve o conceito de shape: esse comando imprime a forma da matriz a, ou seja, a quantidade de linhas e colunas que ela possui.
No caso da questão apresentada, print(a.shape) terá saída (3,), indicando que a matriz a tem 3 elementos ao longo da primeira dimensão (linhas) e nenhum elemento ao longo da segunda dimensão (colunas).
Isso ocorre porque a é uma matriz unidimensional de tamanho 3.
O dtype especificado na criação da matriz não afeta o formato da matriz, apenas a forma como os elementos são interpretados.
______________________________________________________ //
Resposta Final:
O resultado da execução do código será:
[(1, 2) (3, 4) (5, 6)]
(3,)
Gabarito: Errado
Se te ajudou, dê um like :)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo