2
respostas

Dúvida no exemplo da aula

Ao criar o array do numpy e a lista do python, gostaria de saber porque após executar o seguinte código: for i in range(100): np_array *=2 se chamamos o objeto np_array, ele resulta em um array contendo apenas valores 0.

np_array = np.arange(1000000)
py_list = list(range(1000000))
%time for _ in range(100): np_array *=2
np_array

Também não tenho certeza se entendi muito bem o porque de usarmos o underscore, se utilizarmos 'i' ou 'item' ou qualquer nome, ele não executará da mesma forma?

2 respostas

Oi, Bernardo! Tudo bem com você?

Quanto a primeira pergunta, o resultado obtido é dado como 0 por conta do tipo de dado do array que é um int64:

np_array = np.arange(1000000)
print(type(np_array[0]))

Resultado:

<class 'numpy.int64'>

Esse tipo de dado não vai conseguir armazenar valores numéricos que foram multiplicados por 2 por 100 vezes, pois são valore muito grandes e a variável não tem espaço suficiente para armazenar essa quantidade de valores. Uma opção para poder visualizar o resultado é trocar o tipo de variável para o tipo float64 que pode armazenar uma quantidade superior de valores e portanto não haverá problema em mostrar os dados. Para isso, basta declarar o parâmetro dtype na criação do array definindo o valor como np.float64:

np_array = np.arange(1000000, dtype = np.float64)
for _ in range(100): np_array *=2
np_array

Temos então o array com os seguintes valores:

array([0.00000000e+00, 1.26765060e+30, 2.53530120e+30, ...,
       1.26764680e+36, 1.26764806e+36, 1.26764933e+36])

Os quais a expressão e significa que acontece uma multiplicação de 10 elevada ao número colocado ao lado. Por exemplo, no segundo valore temos 1.26765060e+30, que representa 1.26765060 * 10^(+30), mostrando que de fato os valores são muito grandes.

Por fim, quanto sua ultima pergunta, o uso do _ é puramente feita por convenção. Quando utilizamos um for que desejamos apenas que ele faça suas rotinas sem necessitar usar a variável que está sendo contada, normalmente, colocamos o undescore (_) para indicar que esse valor não é útil para a lógica que iremos utilizar. Você pode sim utilizar o i ou colocar um item mas isso é menos usual.

Espero ter te ajudado, bons estudos!

Oi Mirla, muito obrigado! Ajudou sim, eu estava entendendo errado a lógica do que estava sendo feito, agora fez sentido!