Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2023
- Código
- ce153860
- Banca
- CESPE / CEBRASPE
- Órgão
- DATAPREV
- Ano
- 2023
- Nível
- Médio
- Cargo
- Analista de Tecnologia da Informação - Perfil: Inteligência da informação
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo (C). O código utiliza np.dot(a,b) para multiplicação de matrizes (produto escalar) e a*b para multiplicação elemento a elemento, gerando resultados diferentes. A afirmação está correta.
O problema testa a diferença entre dois tipos de multiplicação em arrays NumPy:
np.dot(a,b): realiza o produto matricial (soma dos produtos das linhas de a com as colunas de b).
a * b: realiza a multiplicação elemento a elemento (produto de Hadamard), onde cada posição é o produto dos valores correspondentes.
Cálculo passo a passo:
a = np.array([[1,2],[3,4]])
b = np.array([[4,3],[2,1]])np.dot(a,b):
Linha 1: [14 + 22, 13 + 21] = [4+4=8, 3+2=5]
Linha 2: [34 + 42, 33 + 41] = [12+8=20, 9+4=13]
Resultado: [[8, 5], [20, 13]]
a * b:
[14, 23] = [4, 6]
[32, 41] = [6, 4]
Resultado: [[4, 6], [6, 4]]
Os resultados são claramente diferentes: c é [[8,5],[20,13]] e d é [[4,6],[6,4]]. Portanto, a afirmação de que resultarão em valores diferentes é verdadeira.
Em NumPy, o operador * sobrecarregado sempre realiza operações elemento a elemento, enquanto funções como np.dot, np.matmul ou o operador @ (Python 3.5+) realizam multiplicação matricial. Fique atento a essa diferença, pois é cobrada com frequência em concursos.
Gabarito: C (Certo).
Link permanente: /questoes/ce153860