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

Listas Numpy e Python não apresentam o mesmo resultado

Olá pessoal Estou testando os códigos do professor no Colab, porém encontrei a seguinte questão... Para verificar a diferença de tempo de processamento entre as lista em Numpy e Python usei o comando %%time, e o resultado foi como o esperado, entretanto, quando eu executo o comando para aparecer as duas listas e ver se as duas tem os mesmos elementos, os resultados não batem, pois a lista Array está com todos os elementos resultantes igual a 0.

py_list = list(range(1000000))
np_array = np.arange(1000000)
# TEMPO DE EXECUÇAO DO CODIGO EM LISTAS DO PYTHON

 %%time 
 for item in range(100): py_list = [x * 2 for x in py_list]
#TEMPO DE EXECUÇAO DO CODIGO PELO NUMPY

 %%time 
 for _ in range(100): 
   np_array = np_array * 2

Quando vejo a py_list, os elementos são:

[0, 1267650600228229401496703205376, 2535301200456458802993406410752, 3802951800684688204490109616128, 5070602400912917605986812821504, 6338253001141147007483516026880, 7605903601369376408980219232256, 8873554201597605810476922437632, 10141204801825835211973625643008, ...] (e continua até o final)

Porém a lista np_array sai completamente diferente:

array([0, 0, 0, ..., 0, 0, 0])

(todos os elementos aparecem 0)

2 respostas
solução!

Oi Lincon,

No seu código tenta substituir o 100 por 10. Assim, por exemplo:

for _ in range(10): 
   np_array = np_array * 2

Nesse caso o resultado no np_array vai conter números diferentes de zero. O que acontece é que temos problemas para trabalhar com números muito grandes. O maior número inteiro que conseguimos representar em computadores 64 bits é aproximadamente 9.2 x 10^18. Com a numpy existe essa limitação, pois o tipo de dados mais comum em numpy para números inteiros é o int64. Já o número inteiro das listas pode ser um pouco maior dependendo da memória da máquina utilizada.

Então você descobriu uma vantagem e uma desvantagem da numpy.

Oii Allan,

MUITO obrigado por tirar minha dúvida, agora essas informações fazem sentido.

Da maneira que você disse os resultados apareceram, com o range(10)