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

Duvida sobre seleções

Olá, estava refazendo o curso hoje para reforçar os fundamentos e me deparei com uma duvida conceitual, alguém saberia me explicar o porque esses dois códigos n fazerem a mesma seleção?

Código 1: matriz[:][1:4]

Código 2: matriz[:, 1:4]

Apenas o código 2 apresenta a seleção correta, o código 1 seleciona a matriz toda, não sei o porque, já que a logica utilizada para fazer a seleção foi: primeiro [], que seleciona as linhas, dessas selecione todas e de todas essas no segundo [] selecione da coluna 1:3, alguém saberia me explicar o pq de não está certa essa ideia do código 1?

1 resposta
solução!

Oi, Vinicius! Tudo bem com você?

Os dois códigos são seleções executadas de formas diferentes, por isso, obtemos resultados que podem não ser os desejados. Considerando que você está trabalhando com um array numpy, gerei um array de valores inteiros aleatórios com numpy utilizando o método random.randint:

import numpy as np

matriz = np.random.randint(0,100, size = (5, 5))
matriz

Temos como resultado a matriz:

array([[73, 61, 57, 58, 48],
       [ 8, 66, 96, 32, 14],
       [48, 20,  1, 56, 46],
       [39, 26, 19, 47, 38],
       [69,  2, 95, 33, 92]])

A estrutura do código 2 realiza uma seleção que é definida por array[ linhas , colunas ], como você mesmo especificou. Essa forma é a correta em se utilizar quando desejamos realizar seleção de múltiplas colunas e linhas em uma array, desse modo devemos utilizar essa forma quando desejamos selecionar valores no array. Por conta disso, quando executamos, matriz[:,1:4], nos é retornada todas as linhas das colunas 1, 2 e 3:

matriz[:,1:4]
-----------------------------------
array([[61, 57, 58],
       [66, 96, 32],
       [20,  1, 56],
       [26, 19, 47],
       [ 2, 95, 33]])

Bem, já o código 1 nos mostra uma seleção da seleção. Com essa expressão quero informar que primeiro é feita uma seleção completa da matriz com matriz[:] e o resultado dessa seleção é selecionado novamente, mas dessa vez, apenas as linhas 1, 2 e 3, pois sabemos que a estrutura de uma seleção é dada por array[ linhas , colunas ] - e se temos apenas a especificação das linhas, teremos apenas as linhas selecionadas.

matriz[:][1:4]
-----------------------------------
array([[ 8, 66, 96, 32, 14],
       [48, 20,  1, 56, 46],
       [39, 26, 19, 47, 38]])

Para ficar mais claro, faremos outro exemplo, farei a seleção das linhas 0, 1 e 2:

matriz[:3]
-----------------------------------
array([[73, 61, 57, 58, 48],
       [ 8, 66, 96, 32, 14],
       [48, 20,  1, 56, 46]])

Agora irei realizar outra seleção, selecionando apenas as linhas 0 e 1 do array adicionando outro seletor ao final do meu array:

matriz[:3][:2]
-----------------------------------
array([[73, 61, 57, 58, 48],
       [ 8, 66, 96, 32, 14]])

Imagina também que uma leitura no tópico Dúvida em seleção com arrays também pode ajudar com sua dúvida ;-)

Espero que eu tenha te ajudado, se a dúvida persistir, você pode me comunicar aqui.

Bons estudos!