¿Cómo imprimir la matriz NumPy completa, sin truncamiento?

Cuando imprimo una matriz numpy, obtengo una representación truncada, pero quiero la matriz completa.

¿Hay alguna manera de hacer esto?

Ejemplos:

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

Use numpy.set_printoptions :

 import sys import numpy numpy.set_printoptions(threshold=sys.maxsize) 
 import numpy as np np.set_printoptions(threshold=np.inf) 

Sugiero usar np.inf lugar de np.nan cual es sugerido por otros. Ambos funcionan para su propósito, pero al establecer el umbral en “infinito” es obvio para todos los que lean su código lo que quiere decir. Tener un umbral de “no un número” me parece un poco vago.

Las respuestas anteriores son las correctas, pero como una alternativa más débil puede transformarse en una lista:

 >>> 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]] 

Esto suena como si estuvieras usando adormecido.

Si ese es el caso, puede agregar:

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

Eso deshabilitará la impresión de la esquina. Para obtener más información, consulte este tutorial de NumPy .

Esta es una forma única de hacerlo, que es útil si no desea cambiar su configuración predeterminada:

 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) 

Usando un administrador de contexto como sugirió Paul Price

 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 1.15 o más nuevo

Si usa NumPy 1.15 (publicado 2018-07-23) o más reciente, puede usar el printoptions contexto de printoptions :

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

(por supuesto, reemplace numpy por np si así es como importó numpy )

El uso de un administrador de contexto ( with -block) garantiza que, una vez finalizado el administrador de contexto, las opciones de impresión volverán a ser lo que eran antes de que se iniciara el locking. Asegura que la configuración es temporal y solo se aplica al código dentro del bloque.

Consulte la documentación de numpy.printoptions para obtener detalles sobre el administrador de contexto y qué otros argumentos admite.

numpy.savetxt

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

o si necesitas una cadena:

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

El formato de salida predeterminado es:

 0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 ... 

y se puede configurar con otros argumentos.

Probado en Python 2.7.12, numpy 1.11.1.

Esta es una ligera modificación (eliminada la opción de pasar argumentos adicionales a set_printoptions) de la respuesta de neok .

Muestra cómo puede usar contextlib.contextmanager para crear fácilmente dicho administrador de contexto con menos líneas de código:

 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) 

En tu código se puede utilizar así:

 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) 

numpy.set_printoptions(threshold=numpy.nan) complemento a esta respuesta del número máximo de columnas (corregido con numpy.set_printoptions(threshold=numpy.nan) ), también hay un límite de caracteres para mostrar. En algunos entornos, como cuando se llama a Python desde bash (en lugar de la sesión interactiva), esto se puede solucionar configurando el linewidth del parámetro como se linewidth continuación.

 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) 

En este caso, su ventana debe limitar el número de caracteres para ajustar la línea.

Para aquellos que usen texto sublime y deseen ver los resultados dentro de la ventana de resultados, debe agregar la opción de comstackción "word_wrap": false al archivo de comstackción sublime [ fuente ].

Supongamos que tienes una matriz numpy

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

Si desea imprimir la matriz completa de una sola vez (sin cambiar np.set_printoptions), pero desea algo más simple (menos código) que el administrador de contexto, simplemente haga

 for row in arr: print row 

Puedes usar la función array2string – docs .

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

Desde la versión 1.16 de NumPy, para más detalles, consulte el ticket 12251 de GitHub .

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

No siempre querrá imprimir todos los elementos, especialmente para arreglos grandes.

Una forma sencilla de mostrar más artículos:

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

Funciona bien cuando la matriz cortada <1000 por defecto.

Si una matriz es demasiado grande para ser impresa, NumPy omite automáticamente la parte central de la matriz y solo imprime las esquinas: Para deshabilitar este comportamiento y obligar a NumPy a imprimir toda la matriz, puede cambiar las opciones de impresión usando set_printoptions .

 >>> np.set_printoptions(threshold='nan') 

o

 >>> np.set_printoptions(edgeitems=3,infstr='inf', ... linewidth=75, nanstr='nan', precision=8, ... suppress=False, threshold=1000, formatter=None) 

También puede consultar la documentación de numpy para obtener más ayuda.