806 votes

Comment imprimer le tableau NumPy complet, sans troncature ?

Lorsque j'imprime un tableau numpy, j'obtiens une représentation tronquée, mais je veux le tableau complet.

Y a-t-il un moyen de le faire ?

Exemples :

>>> numpy.arange(10000)
array([   0,    1,    2, ..., 9997, 9998, 9999])

>>> numpy.arange(10000).reshape(250,40)
array([[   0,    1,    2, ...,   37,   38,   39],
       [  40,   41,   42, ...,   77,   78,   79],
       [  80,   81,   82, ...,  117,  118,  119],
       ..., 
       [9880, 9881, 9882, ..., 9917, 9918, 9919],
       [9920, 9921, 9922, ..., 9957, 9958, 9959],
       [9960, 9961, 9962, ..., 9997, 9998, 9999]])

31 votes

Existe-t-il un moyen de le faire de manière ponctuelle ? C'est-à-dire d'imprimer la sortie complète une fois, mais pas à d'autres moments dans le script ?

4 votes

@Matt O'Brien voir la réponse de ZSG ci-dessous

6 votes

Pourriez-vous changer la réponse acceptée pour celle recommandant np.inf ? np.nan y 'nan' ne fonctionnent que par pure chance, et 'nan' ne fonctionne même pas en Python 3 parce qu'ils ont changé l'implémentation de la comparaison de type mixte qui threshold='nan' dépendait.

875voto

Raja Selvaraj Points 1631

Utilice numpy.set_printoptions :

import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)

4 votes

Si vous voulez seulement imprimer un numpy Malheureusement, cette solution présente l'inconvénient de vous obliger à réinitialiser ce changement de configuration après avoir effectué l'impression.

3 votes

@TrevorBoydSmith, Savez-vous comment réinitialiser ce paramètre après l'impression ?

2 votes

@ColinMac voir stackoverflow.com/a/24542498/52074 où il enregistre les paramètres. effectue une opération. puis restaure les paramètres.

287voto

PaulMag Points 2229
import numpy as np
np.set_printoptions(threshold=np.inf)

Je suggère d'utiliser np.inf au lieu de np.nan ce qui est suggéré par d'autres. Les deux fonctionnent pour votre objectif, mais en fixant le seuil à "infini", il est évident pour tous ceux qui lisent votre code ce que vous voulez dire. Avoir un seuil de "pas un nombre" me semble un peu vague.

160voto

gerrit Points 1588

Réglage temporaire

Si vous utilisez NumPy 1.15 (publié le 2018-07-23) ou une version plus récente, vous pouvez utiliser la fonction printoptions gestionnaire de contexte :

with numpy.printoptions(threshold=numpy.inf):
    print(arr)

(bien sûr, remplacer numpy por np si c'est ainsi que vous avez importé numpy )

L'utilisation d'un gestionnaire de contexte (le with -block) garantit qu'après la fin du gestionnaire de contexte, les options d'impression reviendront à ce qu'elles étaient avant le début du bloc. Cela garantit que le paramètre est temporaire et ne s'applique qu'au code à l'intérieur du bloc.

Voir numpy.printoptions documentation pour plus de détails sur le gestionnaire de contexte et les autres arguments qu'il prend en charge.

152voto

Anoyz Points 779

Les réponses précédentes sont les bonnes, mais comme alternative plus faible, vous pouvez transformer en liste :

>>> numpy.arange(100).reshape(25,4).tolist()

[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19], [20, 21,
22, 23], [24, 25, 26, 27], [28, 29, 30, 31], [32, 33, 34, 35], [36, 37, 38, 39], [40, 41,
42, 43], [44, 45, 46, 47], [48, 49, 50, 51], [52, 53, 54, 55], [56, 57, 58, 59], [60, 61,
62, 63], [64, 65, 66, 67], [68, 69, 70, 71], [72, 73, 74, 75], [76, 77, 78, 79], [80, 81,
82, 83], [84, 85, 86, 87], [88, 89, 90, 91], [92, 93, 94, 95], [96, 97, 98, 99]]

48voto

ZSG Points 360

Voici un moyen unique de le faire, qui est utile si vous ne voulez pas modifier vos paramètres par défaut :

def fullprint(*args, **kwargs):
  from pprint import pprint
  import numpy
  opt = numpy.get_printoptions()
  numpy.set_printoptions(threshold=numpy.inf)
  pprint(*args, **kwargs)
  numpy.set_printoptions(**opt)

17 votes

Il semblerait que ce soit un bon endroit pour utiliser un gestionnaire de contexte, de sorte que vous puissiez dire "avec empreinte complète".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X