Analista de Pesquisa Energética (Recursos Energéticos)
Considere o código a seguir, escrito na linguagem de programação Python (versão 3.11.3).<1> import numpy as np<2> x = np.arange(1,30,2).reshape(3,5)<3> y = x[[1,2]]<4> y[0,:]=0<5> z = x[0,2]Assinale a opção que indica o valor que z recebe na linha <5>.
A0
B5
Carray([[ 0, 0, 0, 0, 0]])
Darray([[11, 13, 15], [21, 23, 25]])
Earray([[ 1, 3, 5 ], [11, 13, 15]])
Revelar gabarito e comentário▾
GabaritoB — 5
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Numpy — Indexação e Cópia vs Visão
Gabarito: letra B. O código cria um array x de 3×5 e, em seguida, y recebe uma cópia das linhas 1 e 2 através de fancy indexing (x[[1,2]]). Como a indexação com lista gera uma cópia, a alteração y[0,:]=0 não modifica x. Portanto, z = x[0,2] continua valendo 5, o elemento original.
A FGV testa o conhecimento sobre a diferença entre slicing (que cria visão) e fancy indexing (que cria cópia). Vamos executar mentalmente:
np.arange(1,30,2) gera [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29].
reshape(3,5) monta a matriz:
```
[[ 1, 3, 5, 7, 9],
[11, 13, 15, 17, 19],
[21, 23, 25, 27, 29]]
```
y = x[[1,2]] seleciona as linhas 1 e 2 (índices 1 e 2) e copia esses dados para y:
```
[[11, 13, 15, 17, 19],
[21, 23, 25, 27, 29]]
```
y[0,:] = 0 altera a primeira linha da cópia, mas x permanece intacto.
z = x[0,2] acessa o elemento da linha 0, coluna 2 da matriz original, que é 5.
NÃO CAIA NESSA!
A banca explora a confusão entre visão (slicing) e cópia (fancy indexing). Muitos alunos, ao verem y[0,:]=0, acham que x também é alterado e que z valeria 0. Lembre-se: fancy indexing (lista de índices) SEMPRE gera uma cópia; apenas slicing com : ou fatias (x[1:3]) cria visão.
1np.arange(1,30,2)
2reshape(3,5)
3y = x[[1,2]] (cópia)
4y[0,:] = 0 (não afeta x)
5z = x[0,2] = 5
LEVEL · soulevel.com.br
Alternativa A — ❌ Incorreta
Sugere 0. Ocorreria se y fosse uma visão de x, mas não é — é uma cópia.
Alternativa B — ✅ Correta ⟵ GABARITO
z recebe o valor escalar 5, conforme o raciocínio acima.
Alternativa C — ❌ Incorreta
Apresenta um array 1×5 de zeros, que seria o conteúdo de y após a modificação, não o valor de z.
Alternativa D — ❌ Incorreta
Corresponde à seleção x[[1,2]] sem a modificação, mas z é um escalar.
Alternativa E — ❌ Incorreta
Mostra as duas primeiras linhas da matriz original; novamente, z é um escalar.