Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Aula 5 / Atividade 6 - Dúvida em um fatiamento

Na aula tínhamos a variável 'dados', cujo valor era a seguinte array:

dados = array([[44410.,  5712., 37123.,     0., 25757.],
       [ 2003.,  1991.,  1990.,  2019.,  2006.]])

Ensinando fatiamento, o professor executou o seguinte código:

km_media = dados[:, 1:3][0] / (2019 - dados[:, 1:3][1]) 

Visando obter como retorno:

array([ 204.        , 1280.10344828])

A minha dúvida está na leitura do fatiamento. Pelo que foi dito em aula, quando vai selecionar um elemento dentro de uma array, primeiro vem a linha e depois a coluna, podendo ser [linha, coluna] ou [linha][coluna]. Sendo assim, pelo meu entendimento das aulas, a forma de ler o comando feito pelo professor seria:

"Da variável dados, extrair [todas as linhas, colunas índices 1 e 2 (pois o 3 não é incluído)]" - Igualmente na segunda parte da divisão.

Não consigo entender a lógica dos posicionamentos [0] e [1] que vem em seguida. Consigo visualizar que ele utilizou isso para chamar as linhas 0 e 1, mas isso rompe a lógica de primeiro a linha e depois a coluna.

Executei o código km_media = dados[0][1:3] / (2019 - dados[1][1:3]) e o resultado foi o mesmo.

1 - Considerando que supostamente a ordem de declaração é primeiro a linha e depois a coluna, por que nesse caso veio primeiro a coluna e depois a linha? Essa ordem não é obrigatória? Como o sistema entende essa variação?

2 - Segundo o que foi dito em aula, dados[:, 1:3] significa "pegar de todas as linhas (os dois pontos antes da vírgula), das colunas 1 e 2". Esse mesmo código foi o utilizado na situação problema mencionada, adicionando o "[0]" depois para designar a linha. Não consigo entender, pois teoricamente a linha já foi especificada no primeiro colchete através dos dois pontos, ainda que o resultado seria errado se ela fosse considerada.

Espero ter-me feito compreensível, agradeço muito qualquer esclarecimento!

3 respostas
solução!

Olá Luis,

A gente fala como linha e coluna apenas para fazer uma comparação com um formato de tabela, pois facilita o entendimento:

# Podemos ver como uma tabela com 4 linhas e 3 colunas
[[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9],
 [10, 11, 12]]

Mas isso é apenas uma forma de ver, nada impede de adicionarmos mais um array dentro de uma "célula" dessa tabela:

[[1, 2, 3],
 [4, 5, [6, 6]],
 [7, 8, 9],
 [10, 11, 12]]

O que eu recomendo é sempre ver por partes a seleção, como o valor retornado por dados[:, 1:3] é um array já podemos acessar direto um item seu com os colchetes com dados[:, 1:3][0]

# dados[:, 1:3][0] é o mesmo que:
valor = dados[:, 1:3]
valor[0]

Dá uma olhada nesse outro tópico (um pouco longo mas bem completo) sobre a mesma dúvida que deve ajudar:

https://cursos.alura.com.br/forum/topico-duvida-em-selecao-com-arrays-99780

Espero ter ajudado, qualquer coisa é só falar!

Olá, Lucas!

Primeiramente, obrigado pela resposta e pelo link enviado! Eu havia tentado buscar por algo nesse sentido dentro do fórum, mas ainda estou apanhando para me localizar dentro dele. Obrigado!

Entendi, de fato eu havia fixado muito forte na minha cabeça essa ideia de linhas e colunas, porque de fato facilitam muito a visualização, e acabei não enxergando como um processo de duas etapas. Na minha cabeça era mais uma etapa única, como se estivéssemos dando diretamente um ponto x e um ponto y de um gráfico, quando na realidade estamos dizendo "dentro desse conjunto de dados, selecionar tais dados". Ficou muito mais fácil da visualizar que são apenas variações na forma de acessar um dado.

Enfim, dúvida sanada! Muito obrigado!

Sem problemas Luis, bom saber que a dúvida foi esclarecida!