web-dev-qa-db-fra.com

Erreur de mémoire Numpy créant une énorme matrice

J'utilise numpy et j'essaie de créer une énorme matrice. Ce faisant, je reçois une erreur de mémoire.

Comme la matrice n’a pas d’importance, je vais simplement montrer comment reproduire facilement l’erreur. 

a = 10000000000
data = np.array([float('nan')] * a)

sans surprise, cela me jette MemoryError

Il y a deux choses que j'aimerais dire:

  1. J'ai vraiment besoin de créer et d'utiliser une grande matrice
  2. Je pense avoir assez de RAM pour gérer cette matrice (j'ai 24 Go ou RAM)

Existe-t-il un moyen facile de gérer de grandes matrices dans Numpy?

Juste pour être sûr, j'ai déjà lu ces billets (qui semblent similaires):

Très grandes matrices utilisant Python et NumPy

Python/Numpy MemoryError

Traitement d'un très très gros ensemble de données en python - erreur de mémoire

P.S. apparemment, j'ai des problèmes de multiplication et de division de nombres, ce qui m'a fait penser que j'avais assez de mémoire. Je pense donc qu'il est temps pour moi de dormir, de passer en revue les mathématiques et peut-être d'acheter de la mémoire.

Peut-être à ce moment-là un génie pourrait-il trouver une idée sur la manière de créer cette matrice en utilisant seulement 24 Go de RAM. 

Pourquoi j'ai besoin de cette grande matrice Je ne ferai aucune manipulation avec cette matrice. Tout ce que j'ai à faire est de le sauvegarder dans pytables

7
Salvador Dali

En supposant que chaque nombre à virgule flottante est de 4 octets chacun, vous auriez

(10000000000 * 4) /(2**30.0) = 37.25290298461914

Ou 37,5 gigaoctets, vous devez stocker en mémoire. Donc, je ne pense pas que 24 Go de RAM soit suffisant.

23
Eric Urban

Si vous ne pouvez pas vous permettre de créer une telle matrice, mais que vous souhaitez tout de même faire quelques calculs, essayez matrices creuses .

Si vous souhaitez le transmettre à un autre package Python qui utilise canard en tapant , vous pouvez créer votre propre classe avec __getitem__ implémentant un accès factice.

4
Tigran Saluev

Si vous utilisez pycharm editor for python, vous pouvez modifier les paramètres de mémoire à partir de

C:\Program Files\JetBrains\PyCharm 2018.2.4\bin\pycharm64.exe.vmoptions 

vous pouvez diminuer la vitesse de pycharm à partir de ce fichier afin que la mémoire de votre programme alloue plus de mégabites vous devez modifier ces codes

-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=960m

vous pouvez donc les créer -Xms512m -Xmx1024m et enfin, votre programme fonctionnera mais cela affectera les performances de débogage dans pycharm.

0
Ottoman Empire