Python : corriger l'erreur Unable to allocate array with shape ?

La librairie NumPy est utilisée en Python pour pouvoir réaliser des opérations complexes en mathématiques. Parmi les méthodes qu'elle contient, on trouve la fonction "zeros" qui crée un tableau contenant des zéros, selon la dimension que l'on choisit et avec le type d'entier que l'on souhaite. C'est cette fonction qui peut provoquer l'affichage du message d'erreur "Unable to allocate array with shape".

Cette erreur se produit lorsque vous essayez d'allouer un tableau qui est trop grand pour la mémoire de votre ordinateur. Vous pouvez, avec la fonction "zeros()", utiliser un tuple comme paramètre pour créer autant de dimensions que vous souhaitez dans votre tableau.

//Cette fonction va créer un tableau qui contient 100 000 tableaux contenant chacun 10 tableaux de 3 zéros (des nombres de type float64, prenant chacun 64 bits de votre mémoire).
np.zeros((100000, 10, 3))

Si vous travaillez sur macOS, vous n'aurez pas ce souci, car la gestion de mémoire de Mac fonctionne différemment. Les zéros ne sont pas comptés, ce qui permet de gérer ces grands tableaux. Sur les autres systèmes d'exploitation, ce tableau va prendre une place importante, et si ce n'est pas possible, alors vous obtiendrez ce message d'erreur. Il existe plusieurs solutions pour résoudre ce problème.

La première solution possible est le deuxième paramètre de la fonction zéros, qui est le type d'entier utilisé pour remplir le tableau. Par défaut, NumPy utilise des nombres flottants prenant 64 bits. Vous pouvez gagner de l'espace mémoire en utilisant un type de nombre bien important. Si vous n'avez pas besoin d'un nombre à virgule, le type "uint8" n'occupe que 8 bits dans la mémoire au lieu de 64.

//Alloue le même tableau, avec 8 bits par chiffre au lieu de 64, soit 8 fois moins de place.
np.zeros((100000, 10, 3) , dtype='uint8')

Une autre solution est d'augmenter la taille de la mémoire grâce au système de pagination. Lorsqu'un élément fait dépasser la quantité de mémoire vive utilisée par le système, celui-ci utilise alors un fichier de pagination pour agrandir la mémoire. Selon votre système d'exploitation, la manipulation n'est pas la même.

Si vous utilisez Windows, vous devez vous rendre dans les propriétés avancées du système. Utilisez le raccourci clavier Windows + X et sélectionnez le menu Système. À partir de cet écran, vous pourrez afficher la boîte de dialogue "Informations système". Rendez-vous ensuite dans l'écran "Propriétés système avancées". Dans la section "Performances", cliquez sur le bouton "Paramètres". Depuis cet écran, vous pouvez accéder à un formulaire pour modifier la taille du fichier de pagination et ainsi augmenter la quantité de mémoire de votre ordinateur. Vous devez également vous assurer que vous utilisez bien la version 64 bits de Python, car la version 32 bits ne peut pas utiliser plus de 4 Go de mémoire.

Si vous utilisez Linux, vous devez utiliser un terminal en étant root pour changer le mode de gestion des dépassements de mémoire. Pour afficher la valeur de ce mode, utilisez la commande suivante :

cat /proc/sys/vm/overcommit_memory

Par défaut, la valeur de ce mode est 0, ce qui signifie que s'il y a un dépassement de la mémoire vive, alors il y aura un message d'erreur. On peut changer le mode en utilisant la commande suivante :

echo 1 > /proc/sys/vm/overcommit_memory

Vous devrez cependant être prudent si vous augmentez la taille de la mémoire, car cela va ralentir votre système et vous êtes limité par la taille de votre disque dur.

Python