Quels sont les avantages de NumPy régulier sur les listes Python?
Quels sont les avantages de NumPy régulier sur les listes Python?
J'ai environ 100 marchés financiers de la série, et je vais créer un cube tableau de 100x100x100 = 1 million de cellules. Je vais être en régression (3-variable) chaque x avec chaque y et z, remplir le tableau avec les erreurs standard.
J'ai entendu dire que pour les "grandes matrices" je devrais utiliser NumPy contrairement à Python, les listes, les performances et l'évolutivité des raisons. La chose est, je sais Python listes et ils semblent fonctionner pour moi.
Quels seront les avantages si je me déplace à NumPy?
Et si j'ai eu de la série 1000 (soit 1 milliard de dollars à virgule flottante cellules du cube)?
InformationsquelleAutor Thomas Browne | 2009-06-14
Vous devez vous connecter pour publier un commentaire.
NumPy du tableaux sont plus compacts que les listes Python-une liste de listes que vous le décrivez, en Python, faudrait au moins 20 MO ou plus, tandis qu'un NumPy tableau 3D avec de simple précision flotte dans les cellules correspondrait à 4 MO. L'accès à la lecture et à l'écriture des articles est également plus rapide avec NumPy.
Peut-être que vous ne vous souciez pas tant que ça pour seulement un million de cellules, mais vous avez certainement pour un milliard de cellules -- aucune approche permettrait de s'intégrer dans une architecture 32 bits, mais avec des versions 64 bits NumPy pouvait s'échapper avec 4 GO ou alors, Python seul aurait besoin d'au moins environ 12 GO (beaucoup de pointeurs qui double de volume) -- un beaucoup plus coûteux morceau de matériel!
La différence est principalement due à la "indirectness" -- une liste Python est un tableau de pointeurs vers des objets Python, au moins 4 octets par pointeur de plus de 16 octets, même pour le plus petit objet Python (4 pour le type pointeur, 4 pour le compte de référence, 4 pour la valeur -- et la mémoire allocateurs de tours jusqu'à 16). Un tableau NumPy est un tableau de valeurs uniformes -- nombres simple précision prend 4 octets chacun, double précision, de 8 octets. Moins souple, mais vous payez considérablement la souplesse des standards de Python, les listes de!
getsizeof
sur une liste ne vous raconte pas la quantité de RAM de la liste de l'objet lui-même consomme et la RAM consommée par les pointeurs dans son tableau de données, il n'a pas vous dire combien de RAM est consommée par les objets que ceux des pointeurs de référence.float
s (4 octets) serait traduit en quelque chose de plus de 32 GO d'une valeur delist
s et Pythonfloat
s (qui sont en fait Cdouble
s), pas de 12 GO; chaquefloat
sur 64 bits Python occupe ~24 octets (en supposant qu'aucun alignement des pertes dans l'allocateur), plus un autre de 8 octets dans lalist
pour contenir la référence (et qui ignore la surutilisation et de l'objet en-têtes pour lelist
s eux-mêmes, qui pourrait ajouter un autre GO, en fonction de combien exactement la surutilisation se produit).float
s étaient de référence pour le mêmefloat
, mais compte tenu de Python n'a pas defloat
la mise en cache, rien d'autre que la même valeur de plus et plus (pas utile), il faudrait vous manuellement mettre en œuvre un stage pour votrefloat
s à réaliser que la mémoire de réduction, et il semble assez peu probable que vous auriez si peu uniquefloat
s que le stage serait d'aider (depuis le stagiaire cache lui-même serait la fin de la hausse de la consommation d'une tonne de mémoire par la suite).NumPy n'est pas seulement plus efficace; il est aussi plus pratique. Vous obtenez beaucoup de vecteur et matrice des opérations pour libre, qui permettent parfois d'éviter le travail inutile. Et ils sont aussi efficacement mis en œuvre.
Par exemple, vous pouvez lire votre cube directement à partir d'un fichier dans un tableau:
Somme au long de la seconde dimension:
Trouver lequel les cellules sont au-dessus d'un seuil:
Supprimer tous les même indexé tranche le long de la troisième dimension:
Aussi, de nombreuses bibliothèques de travailler avec des tableaux NumPy. Par exemple, l'analyse statistique et de visualisation des bibliothèques.
Même si vous n'avez pas de problèmes de performance, l'apprentissage NumPy est la valeur de l'effort.
Alex mentionné l'efficacité de mémoire, et Roberto mentionne commodité, et ce sont deux bons points. Pour un peu plus d'idées, je vais vous parler de vitesse et fonctionnalité.
Fonctionnalité: Vous obtenez beaucoup construit en avec NumPy, Fft, circonvolutions, la recherche rapide, les statistiques de base, l'algèbre linéaire, histogrammes, etc. Et vraiment, qui ne peuvent vivre sans Fft?
Vitesse: Voici un test à faire une somme sur une liste et un tableau NumPy, montrant que la somme sur le tableau NumPy est 10x plus rapide (dans ce test -- kilométrage peut varier).
qui sur mes systèmes (alors que je suis en cours d'exécution d'une sauvegarde) donne:
Voici une belle réponse de la FAQ sur le scipy.org site web:
Quels sont les avantages de faire des tableaux NumPy offrent plus (imbriqué) Python listes?
Ont tous mis en évidence presque toutes les principales différences entre un tableau numpy et liste python, je vais juste les informer ici:
Numpy tableaux ont une taille fixe à la création, à la différence de python listes (qui peut se développer de manière dynamique). Modification de la taille de ndarray permettra de créer un nouveau tableau et de supprimer l'original.
Les éléments dans un tableau Numpy doivent tous être du même type de données (on peut avoir de l'hétérogénéité de type de bien, mais qui ne va pas vous permettre d'opérations mathématiques) et va donc être de la même taille en mémoire
Tableaux Numpy sont facilitées avancées mathématiques et d'autres types d'opérations sur un grand nombre de données. Généralement, de telles opérations sont exécutées plus efficacement et avec moins de code que ce qui est possible à l'aide de pythons construire des séquences