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:

  1. J'ai vraiment besoin de créer et d'utiliser une matrice de grosse
  2. 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

Python/Numpy MemoryError

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.

Comment prévoyez-vous d'ajustement de 10 milliards de flotteurs en 24 GO? Si un flotteur de 2.4 octets, et 100% de la RAM ont été consacrées à la tenue de ce tableau - bien sûr 😉
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