Quais são as vantagens do NumPy em relação às listas regulares de Python?
Tenho aproximadamente 100 séries de mercados financeiros e vou criar uma matriz de cubos de 100x100x100 = 1 milhão de células. Estarei regredindo (3 variáveis) cada x com cada ye z, para preencher a matriz com erros padrão.
Ouvi dizer que, para "matrizes grandes", devo usar o NumPy em vez de listas Python, por razões de desempenho e escalabilidade. O problema é que eu sei as listas Python e elas parecem funcionar para mim.
Quais serão os benefícios se eu mudar para o NumPy?
E se eu tivesse 1000 séries (ou seja, 1 bilhão de células de ponto flutuante no cubo)?
getsizeof
não é confiável. A documentação afirma claramente que: Apenas o consumo de memória diretamente atribuído ao objeto é contabilizado, não o consumo de memória dos objetos a que se refere. Isso significa que, se você aninhar listas python, o tamanho dos elementos não é levado em consideração.getsizeof
em uma lista, apenas informa a quantidade de RAM que o próprio objeto de lista consome e a RAM consumida pelos ponteiros em sua matriz de dados, não informa a quantidade de RAM consumida pelos objetos a que esses ponteiros se referem.float
s (4 bytes) se traduziria em algo mais próximo de 32 GB no valor de selist
Pythonfloat
s (que na verdade são Cdouble
s), não de 12 GB; cada umfloat
em Python de 64 bits ocupa ~ 24 bytes (assumindo que não há perdas de alinhamento no alocador), mais outros 8 byteslist
para manter a referência (e isso ignora a localização geral e os cabeçalhos de objetos paralist
si, o que pode adicionar outro GB dependendo exatamente quanto ocorre a superalocação).NumPy não é apenas mais eficiente; também é mais conveniente. Você obtém muitas operações de vetores e matrizes de graça, o que às vezes permite evitar trabalhos desnecessários. E eles também são implementados com eficiência.
Por exemplo, você pode ler seu cubo diretamente de um arquivo em uma matriz:
Soma ao longo da segunda dimensão:
Encontre quais células estão acima de um limite:
Remova todas as fatias indexadas pares ao longo da terceira dimensão:
Além disso, muitas bibliotecas úteis trabalham com matrizes NumPy. Por exemplo, análise estatística e bibliotecas de visualização.
Mesmo que você não tenha problemas de desempenho, aprender o NumPy vale a pena.
fonte
Alex mencionou eficiência de memória e Roberto menciona conveniência, e esses são dois pontos positivos. Para mais algumas idéias, mencionarei velocidade e funcionalidade .
Funcionalidade: você incorpora muito o NumPy, FFTs, convoluções, pesquisa rápida, estatísticas básicas, álgebra linear, histogramas, etc. E realmente, quem pode viver sem FFTs?
Velocidade: aqui está um teste para fazer uma soma sobre uma lista e uma matriz NumPy, mostrando que a soma na matriz NumPy é 10x mais rápida (neste teste - a milhagem pode variar).
que em meus sistemas (enquanto estou executando um backup) fornece:
fonte
Aqui está uma boa resposta das perguntas frequentes no site scipy.org :
Quais vantagens as matrizes NumPy oferecem sobre listas Python (aninhadas)?
fonte
Todos destacaram quase todas as principais diferenças entre a matriz numpy e a lista python. Vou apresentá-las aqui:
Matrizes numpy têm um tamanho fixo na criação, diferentemente das listas python (que podem crescer dinamicamente). Alterar o tamanho do ndarray criará uma nova matriz e excluirá o original.
Todos os elementos em uma matriz Numpy precisam ter o mesmo tipo de dados (também podemos ter o tipo heterogêneo, mas isso não permitirá operações matemáticas) e, portanto, terão o mesmo tamanho na memória
Matrizes numpy são avanços facilitados em matemática e outros tipos de operações em um grande número de dados. Normalmente, essas operações são executadas de forma mais eficiente e com menos código do que é possível usando pythons construídos em sequências
fonte