Când am imprima un numpy matrice, am obține un trunchi de reprezentare, dar vreau gamă completă.
Există vreo modalitate de a face acest lucru?
Exemple:
>>> 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]])
Utilizarea numpy.set_printoptions
:
import sys
import numpy
numpy.set_printoptions(threshold=sys.maxsize)
import numpy as np
np.set_printoptions(threshold=np.inf)
Am sugerăm să utilizați np.inf "în loc de" np.nan` care este sugerat de către alții. Amândoi lucrează pentru scopul dumneavoastră, dar, de stabilirea pragului de la "infinit" este evident pentru toată lumea a citit codul la ce te referi. Având un prag de "o" pare un pic cam vag pentru mine.
Răspunsurile anterioare sunt cele corecte, dar mai slab ca o alternativă, puteți transforma într-o listă:
>>> 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]]
Acest lucru sună ca tine're folosind numpy.
Dacă asta's caz, puteți adăuga:
import numpy as np
np.set_printoptions(threshold=np.nan)
Care va dezactiva colț de imprimare. Pentru mai multe informații, a se vedea acest NumPy Tutorial.
Aici este o modalitate de a face acest lucru, care este util dacă nu't doriți să modificați setările implicite:
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)
Dacă utilizați NumPy 1.15 (lansat 2018-07-23) sau mai nou, puteți utiliza `printoptions context manager:
with numpy.printoptions(threshold=numpy.inf):
print(arr)
(desigur, înlocuiți numpy
de np
dacă's cum ați importat numpy
)
Utilizarea unui context manager (the " cu " -bloc) asigură, după contextul manager este terminat, opțiunile de imprimare va reveni la ceea ce au fost înainte de a inceput sa se blocheze. Acesta asigură setarea este temporară, și numai aplicat codul în bloc.
Vezi numpy.printoptions
documentația pentru detalii privind contextul manager și ce alte argumente pe care le susține.
Folosind un context manager de fi Paul Preț sugggested
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)
numpy.savetxt
numpy.savetxt(sys.stdout, numpy.arange(10000))
sau dacă aveți nevoie de un string:
import StringIO
sio = StringIO.StringIO()
numpy.savetxt(sio, numpy.arange(10000))
s = sio.getvalue()
print s
Formatul implicit de ieșire este:
0.000000000000000000e+00
1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
...
și acesta poate fi configurat cu mai multe argumente.
Rețineți, în special, cum, de asemenea, nu prezinta paranteze drepte, și permite o mulțime de personalizare, așa cum am menționat la: https://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765
Testat pe Python 2.7.12, numpy 1.11.1.
Aceasta este o modificare minoră (eliminat opțiunea de a trece de argumente suplimentare pentru a set_printoptions)
de neoks-a răspuns.
Ea arată cum puteți utiliza contextlib.contextmanager
pentru a crea cu ușurință o astfel de contextmanager cu mai puține linii de cod:
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)
În codul poate fi folosit astfel:
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)
Complementar răspunde de la numărul maxim de coloane (fixe cu numpy.set_printoptions(prag=numpy.nan)), există, de asemenea, o limită de caractere pentru a fi afișate. În unele medii, cum ar fi atunci când de asteptare python de la bash (mai degrabă decât sesiune interactivă), acest lucru poate fi stabilit prin setarea parametrului
largimea` după cum urmează.
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)
În acest caz, fereastra ar trebui să limiteze numărul de caractere pentru a încheia linie.
Pentru cei de acolo folosesc sublime text și dorința de a vedea rezultatele în fereastra de ieșire, va trebui să adăugați opțiunea "build" "word_wrap": fals
la sublim-de a construi fișier [sursa] .
Deoarece NumPy versiunea 1.16, pentru mai multe detalii a se vedea GitHub bilet 12251.
from sys import maxsize
from numpy import set_printoptions
set_printoptions(threshold=maxsize)
Să presupunem că aveți un numpy matrice
arr = numpy.arange(10000).reshape(250,40)
Dacă doriți să imprimați gamă completă într-o singură modalitate (fără comutare np.set_printoptions), dar vreau ceva mai simplu (mai puțin cod) decât în contextul manager, doar face
for row in arr:
print row
Ai câștigat't doresc întotdeauna toate elementele tipărite, în special pentru rețele mari.
Un mod simplu de a arăta mai multe elemente:
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])
Acesta funcționează bine atunci când felii matrice < 1000 de default.
Dacă o matrice este prea mare pentru a fi tipărite, NumPy sare automat partea centrală de matrice și numai amprentele colțuri:
Pentru a dezactiva acest comportament și forța NumPy să imprimați întreaga matrice, puteți modifica opțiunile de tipărire folosind set_printoptions
.
>>> np.set_printoptions(threshold='nan')
sau
>>> np.set_printoptions(edgeitems=3,infstr='inf',
... linewidth=75, nanstr='nan', precision=8,
... suppress=False, threshold=1000, formatter=None)
De asemenea, puteți să consultați numpy documentația numpy documentația pentru "sau o parte" pentru mai mult ajutor.