web-dev-qa-db-fra.com

Comment imprimer le tableau NumPy complet, sans troncature?

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

Est-ce qu'il y a un moyen de faire ça?

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]])
468
kame

Utilisez numpy.set_printoptions :

_import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
_
498
Raja Selvaraj
import numpy as np
np.set_printoptions(threshold=np.inf)

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

192
PaulMag

Les réponses précédentes sont les bonnes, mais comme alternative plus faible, vous pouvez transformer une 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]]
66
Anoyz

On dirait que vous utilisez numpy.

Si c'est le cas, vous pouvez ajouter:

import numpy as np
np.set_printoptions(threshold=np.nan)

Cela désactivera l’impression de coin. Pour plus d'informations, consultez ceci NumPy Tutorial .

42
Reed Copsey

Voici un moyen unique de le faire, ce qui est utile si vous ne souhaitez 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='nan')
  pprint(*args, **kwargs)
  numpy.set_printoptions(**opt)
33
ZSG

Utiliser un gestionnaire de contexte comme Paul Price suggéré

import numpy as np


class fullprint:
    'context manager for printing full numpy arrays'

    def __init__(self, **kwargs):
        kwargs.setdefault('threshold', np.inf)
        self.opt = kwargs

    def __enter__(self):
        self._opt = np.get_printoptions()
        np.set_printoptions(**self.opt)

    def __exit__(self, type, value, traceback):
        np.set_printoptions(**self._opt)

a = np.arange(1001)

with fullprint():
    print(a)

print(a)

with fullprint(threshold=None, edgeitems=10):
    print(a)
27
neok

NumPy 1.15 ou plus récent

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

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

(bien sûr, remplacez numpy par np si vous importez ainsi numpy)

L'utilisation d'un gestionnaire de contexte (le bloc with-) garantit que, une fois le gestionnaire de contexte terminé, les options d'impression redeviendront 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 dans le bloc.

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

23
gerrit

numpy.savetxt

_numpy.savetxt(sys.stdout, numpy.arange(10000))
_

ou si vous avez besoin d'une ficelle:

_import StringIO
sio = StringIO.StringIO()
numpy.savetxt(sio, numpy.arange(10000))
s = sio.getvalue()
print s
_

Le format de sortie par défaut est:

_0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
...
_

et il peut être configuré avec d'autres arguments.

Notez en particulier comment cela ne montre pas les crochets, et permet beaucoup de personnalisation, comme mentionné à: Comment imprimer un tableau Numpy sans crochets?

Testé sur Python 2.7.12, numpy 1.11.1.

Il s’agit d’une légère modification (suppression de la possibilité de passer des arguments supplémentaires à _set_printoptions)_ de neok s.

Il montre comment vous pouvez utiliser contextlib.contextmanager pour créer facilement un tel gestionnaire de contexte avec moins de lignes de code:

_import numpy as np
from contextlib import contextmanager

@contextmanager
def show_complete_array():
    oldoptions = np.get_printoptions()
    np.set_printoptions(threshold=np.inf)
    try:
        yield
    finally:
        np.set_printoptions(**oldoptions)
_

Dans votre code, il peut être utilisé comme ceci:

_a = np.arange(1001)

print(a)      # shows the truncated array

with show_complete_array():
    print(a)  # shows the complete array

print(a)      # shows the truncated array (again)
_
10
MSeifert

Complémentaire à ceci réponse à partir du nombre maximum de colonnes (fixé avec numpy.set_printoptions(threshold=numpy.nan)), il existe également une limite de caractères à afficher. Dans certains environnements, comme lorsque vous appelez python à partir de bash (plutôt que de la session interactive), vous pouvez corriger ce problème en définissant le paramètre linewidth comme suit.

import numpy as np
np.set_printoptions(linewidth=2000)    # default = 75
Mat = np.arange(20000,20150).reshape(2,75)    # 150 elements (75 columns)
print(Mat)

Dans ce cas, votre fenêtre devrait limiter le nombre de caractères pour envelopper la ligne.

Pour ceux qui utilisent du texte sublime et veulent voir les résultats dans la fenêtre de sortie, vous devez ajouter l'option de construction "Word_wrap": false au fichier de construction sublime [ source ].

6
Traxidus Wolf

Supposons que vous ayez un tableau numpy

 arr = numpy.arange(10000).reshape(250,40)

Si vous voulez imprimer le tableau complet de manière unique (sans basculer np.set_printoptions), mais voulez quelque chose de plus simple (moins de code) que le gestionnaire de contexte, faites simplement

for row in arr:
     print row 
2
Mike Wojnowicz

Vous ne voudrez pas toujours que tous les éléments soient imprimés, en particulier pour les grands tableaux.

Un moyen simple d’afficher plus d’articles:

In [349]: ar
Out[349]: array([1, 1, 1, ..., 0, 0, 0])

In [350]: ar[:100]
Out[350]:
array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
       1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1])

Cela fonctionne bien lorsque le tableau en tranches <1000 par défaut.

1
Robin Qiu

Depuis NumPy version 1.16, pour plus de détails, voir ticket GitHub 12251 .

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)
1
Velizar VESSELINOV

Pour l'éteindre et revenir au mode normal

np.set_printoptions(threshold=False)
1
ewalel

Vous pouvez utiliser la fonction array2string - docs .

a = numpy.arange(10000).reshape(250,40)
print(numpy.array2string(a, threshold=numpy.nan, max_line_width=numpy.nan))
# [Big output]
1
Szymon Zmilczak