Quels sont les avantages de NumPy par rapport aux listes Python régulières?
J'ai environ 100 séries de marchés financiers et je vais créer un réseau de cubes de 100x100x100 = 1 million de cellules. Je vais régresser (3 variables) chaque x avec chaque y et z, pour remplir le tableau avec des erreurs standard.
J'ai entendu dire que pour les "grandes matrices", je devrais utiliser NumPy par opposition aux listes Python, pour des raisons de performances et d'évolutivité. Le fait est que je connais les listes Python et elles semblent fonctionner pour moi.
Quels seront les avantages si je passe à NumPy?
Et si j'avais 1000 séries (c'est-à-dire 1 milliard de cellules à virgule flottante dans le cube)?
getsizeof
n'est pas fiable. La documentation indique clairement que: Seule la consommation de mémoire directement attribuée à l'objet est prise en compte, pas la consommation de mémoire des objets auxquels il se réfère. Cela signifie que si vous avez des listes python imbriquées, la taille des éléments n'est pas prise en compte.getsizeof
sur une liste ne vous indique que la quantité de RAM que l'objet liste lui-même consomme et la RAM consommée par les pointeurs de son tableau de données, il ne vous indique pas la quantité de RAM consommée par les objets auxquels ces pointeurs se réfèrent.float
(4 octets) se traduirait par quelque chose de plus proche de 32 Go delist
s et de Pythonfloat
(qui sont en fait des Cdouble
), pas de 12 Go; chacunfloat
sur 64 bits Python occupe ~ 24 octets (en supposant qu'aucune perte d'alignement dans l'allocateur), plus 8 autres octets danslist
pour contenir la référence (et qui ignore la surallocation et les en-têtes d'objet pour leslist
s eux-mêmes, ce qui pourrait ajouter un autre Go en fonction de exactement combien de surutilisation se produit).NumPy n'est pas seulement plus efficace; c'est aussi plus pratique. Vous obtenez gratuitement de nombreuses opérations vectorielles et matricielles, ce qui permet parfois d'éviter un travail inutile. Et ils sont également mis en œuvre efficacement.
Par exemple, vous pouvez lire votre cube directement depuis un fichier dans un tableau:
Somme le long de la deuxième dimension:
Trouvez les cellules au-dessus d'un seuil:
Supprimez chaque tranche d'indexation paire le long de la troisième dimension:
En outre, de nombreuses bibliothèques utiles fonctionnent avec les tableaux NumPy. Par exemple, des bibliothèques d'analyse statistique et de visualisation.
Même si vous n'avez pas de problèmes de performances, l'apprentissage de NumPy en vaut la chandelle.
la source
Alex a mentionné l'efficacité de la mémoire et Roberto mentionne la commodité, et ce sont deux bons points. Pour quelques autres idées, je mentionnerai la vitesse et la fonctionnalité .
Fonctionnalité: Vous avez beaucoup intégré avec NumPy, FFT, convolutions, recherche rapide, statistiques de base, algèbre linéaire, histogrammes, etc. Et vraiment, qui peut vivre sans FFT?
Vitesse: voici un test pour faire une somme sur une liste et un tableau NumPy, montrant que la somme sur le tableau NumPy est 10 fois plus rapide (dans ce test - le kilométrage peut varier).
qui sur mes systèmes (pendant que j'exécute une sauvegarde) donne:
la source
Voici une belle réponse de la FAQ sur le site scipy.org :
Quels avantages les tableaux NumPy offrent-ils par rapport aux listes Python (imbriquées)?
la source
Tous ont mis en évidence presque toutes les différences majeures entre le tableau numpy et la liste python, je les résumerai ici:
Les tableaux Numpy ont une taille fixe à la création, contrairement aux listes Python (qui peuvent croître dynamiquement). La modification de la taille de ndarray créera un nouveau tableau et supprimera l'original.
Les éléments d'un tableau Numpy doivent tous être du même type de données (nous pouvons également avoir le type hétérogène mais cela ne vous permettra pas d'opérations mathématiques) et auront donc la même taille en mémoire
Les tableaux Numpy facilitent les avancées mathématiques et d'autres types d'opérations sur un grand nombre de données. De telles opérations sont généralement exécutées plus efficacement et avec moins de code que ce qui est possible en utilisant des séquences pythons intégrées
la source