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

[Dúvida] Seleção de um intervalo

Pensei que a resposta do exercício estava incorreta, mas ao rodar no meu colab funcionou, fiquei sem entender porque.

Questão:

Charlie está trabalhando com uma base de dados de clientes de uma loja.

clientes = np.array([[1, 'João', 30, 'Rua A', 100, 'eletrônicos'],
                     [2, 'Maria', 25, 'Rua B', 200, 'moda'],
                     [3, 'Pedro', 35, 'Rua C', 50, 'esportes']])
                     
As quatro primeiras colunas representam dados pessoais dos clientes e ele não 
pode usá-las na análise. Por isso, ele pretende construir um novo array de nome 
intencao_compras para armazenar apenas as duas últimas colunas dos dados. 
Qual comando ele deve utilizar para o resultado desejado?

O array possui 6 colunas, se é necessário trazer as duas últimas, seriam as colunas 5 e 6:

intencao_compras = clientes[:,4:]

Com isso retornaram as colunas da 5 em diante, com o 4 não incluso. A primeira duvida é que até aqui o 4 estaria incluso se observarmos os exemplos das aulas, já que os arrays sempre começaram por 0 e nós trouxemos a coluna 1 usando, por exemplo: "usecols=np.arange(1,88,1)" (da coluna 1 até 87)

A segunda duvida é que foram solicitadas duas alternativas corretas. E o que eu não entendi é como a outra alternativa pode estar correta...

intencao_compras = clientes[:,4:6]

Se o array possui 6 colunas e até o momento o professor tem reforçado que o ultimo número não está incluso e estamos usando o ultimo numero + 1, como pode essa solução também trazer as colunas 5 e 6 se o 6 não estava incluso?

Porque a logica foi invertida? De um código para outro a logica do ultimo numero não estar incluso passou a ser que o primeiro não estaria incluso. Não vi ele citar isso até o momento.

2 respostas
solução!

Entendo a confusão, mas vamos esclarecer como a indexação funciona no NumPy e por que ambas as soluções estão corretas.

Sobre a Indexação no NumPy

A indexação no NumPy, assim como em muitas outras bibliotecas e linguagens de programação que seguem a convenção de indexação baseada em zero (como Python), começa em 0. Isso significa que o primeiro elemento de qualquer dimensão é acessado pelo índice 0, o segundo elemento pelo índice 1, e assim por diante.

Quando você faz a indexação usando um intervalo, como 4:6, o primeiro número (4 neste caso) é inclusivo, o que significa que a indexação começa daquele elemento (o quinto elemento, pois a contagem começa em 0). O segundo número (6 neste caso) é exclusivo, significando que a indexação vai até, mas não inclui, o elemento naquele índice (o sétimo elemento, na verdade).

Sobre Seus Exemplos

No seu primeiro exemplo:

intencao_compras = clientes[:,4:]

Isso significa "selecione todas as linhas (:) e, para as colunas, comece no índice 4 (a quinta coluna, porque a contagem começa em 0) e vá até o final do array". Não há número após o :, então ele pega tudo até o final.

No segundo exemplo:

intencao_compras = clientes[:,4:6]

Isso significa "selecione todas as linhas (:) e, para as colunas, comece no índice 4 (novamente, a quinta coluna) e vá até o índice 6, sem incluí-lo". Neste caso, como os índices são baseados em 0, o índice 6 se refere à sétima coluna, que não existe no seu array. Portanto, essa instrução pega as colunas de índice 4 e 5, que são exatamente a quinta e a sexta colunas.

Por que Ambas Estão Corretas

Ambas as instruções estão corretas porque ambas efetivamente selecionam as duas últimas colunas do seu array. A diferença está na forma como a operação de corte (slice) é especificada:

  • No primeiro caso, você simplesmente omite o segundo número, indicando que quer tudo desde o índice 4 até o final.
  • No segundo caso, você especifica explicitamente que quer desde o índice 4 até o índice 6, sabendo que o 6 não é incluído, o que não faz diferença aqui porque o array só tem 6 colunas para começar.

Espero que isso esclareça sua dúvida! A lógica de "o último número não está incluso" se mantém consistente em ambos os casos; a diferença é apenas na forma como o intervalo é definido.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Noooossa verdade! Viajei! kkkkkkk Obrigado!