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]])
Utilisez numpy.set_printoptions
:
_import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
_
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.
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]]
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 .
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)
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)
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.
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)
_
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 ].
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
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.
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)
Pour l'éteindre et revenir au mode normal
np.set_printoptions(threshold=False)
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]