Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O exercício ainda não faz sentido para mim

Eu compreendi o que me foi pedido, e consigo compreender o código. Vi que outra pessoa teve a mesma dúvida, mas isso ainda não entra na minha cabeça... vamos lá

dados = np.array(
    [
        ['Roberto', 'casado', 'masculino'],
        ['Sheila', 'solteiro', 'feminino'],
        ['Bruno', 'solteiro', 'masculino'],
        ['Rita', 'casado', 'feminino']
    ]
)

A resposta é: dados[0::2, :2]

Eu consigo entender a primeira parte. Entre colchetes o que eu estou pedindo é o retorno de um slice da primeira linha (0) até a última linha com passo 2. Até aí, não tem bronca! Passou a vírgula, vou pedir o retorno das colunas, já que eu não sinalizei antes dos dois pontos, sei que estou pedindo do início até a segunda coluna. Contudo, as colunas não deveriam iniciar do 0 ao invés de 1? O comando .shape me diz que dados é um array (4, 3) quatro linhas e três colunas. Então eu tenho linha 0, linha 1, linha 2 e linha 4, não deveria ser a mesma coisa com as colunas? Coluna 0, coluna 1 e coluna 2?

Se esse fosse o caso, sei que, seguindo a lógica, a terceira coluna será mostrada e a resposta estaria errada. Eu me perdi em algum ponto? Ou é por que quando eu comando um slice de um valor até outro valor, o valor final não aparece?

1 resposta
solução!

Olá, Pablo! Tudo bem com você?

A sintaxe para o slice de array numpy é a seguinte:

array[inicio:fim:passo, inicio:fim:passo]

Antes da vírgula refere-se às linhas, após a vírgula refere-se às colunas.

Para linhas e colunas temos que:

  • início: Se não for especificado começa em 0
  • fim: Se não for especificado vai até o fim das linhas ou colunas do array. Se for especificado vai até o número especificado menos 1, pois o fim é não incluso.
  • Passo: Parâmetro não obrigatório. Refere-se ao passo que será adotado no fatiamento. Pode ser adotado tanto nas linhas como nas colunas.

Quando realizamos:

dados[0::2, :2]

Nas linhas estamos realizando o fatiamento da linha 0 até última linha com o passo de 2, ou seja, estamos pegando as linhas 0 e 2. Só um detalhe é que você poderia ter feito dados[::2, :2] sem o 0 inicial que daria o mesmo resultado, pois como falado anteriormente caso o inicio não seja passado o slice começará em 0. Nas colunas estamos pegando do início, ou seja da coluna 0, e indo até a coluna 1 (pois o 2 especificado é não incluso).

De acordo com nossa base de dados:

import numpy as np

dados = np.array(
    [#    Coluna 0   coluna 1   coluna 2
        ['Roberto', 'casado', 'masculino'], # linha 0
        ['Sheila', 'solteiro', 'feminino'], # linha 1
        ['Bruno', 'solteiro', 'masculino'], # linha 2
        ['Rita', 'casado', 'feminino']  # linha 3
    ]
)

Nosso resultado será:

#Coluna 0   coluna 1
['Roberto', 'casado'], # linha 0
['Bruno', 'solteiro'], # linha 2

Deixo como sugestão de leitura complementar esse artigo (em inglês) que mostra uns exemplos bem bacanas de como realizar slice com arrays de até 3 dimensões.

Espero ter ajudado e que tenha esclarecido sua dúvida, mas se ainda persistir algo que ainda não ficou completamente entendido, retorne por aqui para sanarmos.

:)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!