Numpy erreur de mémoire la création d'immenses matrice
Je suis à l'aide de numpy et d'essayer de créer une énorme matrice.
Tout en faisant cela, je reçois une erreur de mémoire
Parce que la matrice n'est pas important, je vais juste vous montrer la façon de reproduire l'erreur facilement.
a = 10000000000
data = np.array([float('nan')] * a)
il n'est pas surprenant, ce me jette MemoryError
Il y a deux choses que je voudrais dire:
- J'ai vraiment besoin de créer et d'utiliser une matrice de grosse
- Je pense avoir assez de RAM pour gérer cette matrice (j'ai 24 Go de RAM)
Est-il un moyen facile de traiter de grands volumes de matrices dans numpy?
Juste pour être sur le côté sécuritaire, je l'ai déjà lu ces messages (qui semble similaire):
Les très grandes matrices à l'aide de Python et NumPy
Le traitement d'un très très grand ensemble de données en python - erreur de mémoire
P. S. apparemment, j'ai quelques problèmes avec la multiplication et la division des nombres, qui m'a fait penser que j'ai assez de mémoire. Donc je pense qu'il est temps pour moi d'aller dormir, l'examen de mathématiques et peut-être d'acheter de la mémoire.
Peut-être pendant ce temps, certains de génie pourrait venir avec l'idée de la façon de créer cette matrice à l'aide de seulement 24 Go de Ram.
Pourquoi j'ai besoin de cette matrice de grosse
Je ne vais pas faire toutes les manipulations avec cette matrice. Tout ce que je dois faire avec c'est de l'enregistrer dans pytables.
Que devez-vous faire avec cette matrice? Qui pourrait donner un aperçu d'une solution de contournement.
je ne peux pas vous enregistrer morceau par morceau? n travail sur les partitions de vos données?
Aussi, La façon dont vous créez elle crée tout d'abord une liste python de cette taille. Maintenant, le flotteur est toujours le même objet, mais la liste elle-même aura la même taille que le tableau qui en résulte (pointeur est de 8 octets et double est de 8 octets). Donc, utiliser
np.empty
plus np.fill
pour créer des tableaux, en particulier dans le serré de mémoire.(bien que ce matrices de grande taille, vous devez probablement pas de le charger dans la RAM directement de toute façon, mais l'utilisation hdf5 ou de la mémoire de la cartographie ou de...)
OriginalL'auteur Salvador Dali | 2013-09-30
Vous devez vous connecter pour publier un commentaire.
En supposant que chaque nombre à virgule flottante est de 4 octets chacun, vous auriez
Ou 37,5 gigaoctets vous avez besoin de stocker dans la mémoire. Donc je ne pense pas 24go de RAM est suffisant.
OriginalL'auteur Eric Urban
Si vous ne pouvez pas se permettre la création d'une telle matrice, mais souhaitez quand même faire quelques calculs, essayez matrices creuses.
Si vous souhaitez passer à un autre paquet Python qui utilise le duck-typing, vous pouvez créer votre propre classe avec
__getitem__
la mise en œuvre mannequin d'accès.OriginalL'auteur Tigran Saluev
Si vous utilisez pycharm éditeur pour python, vous pouvez modifier les paramètres de la mémoire de
vous pouvez diminuer pycharm vitesse à partir de ce fichier afin que votre mémoire de programme permettra d'allouer plus de megabites
vous devez modifier cette codes
de sorte que vous pouvez les faire -Xms512m -Xmx1024m et, enfin, de votre programme de travail
mais ça va affecter le débogage de la performance dans pycharm.
OriginalL'auteur Ottoman Empire