tutorial - promedio de una matriz python
¿Cómo imprimir la matriz NumPy completa? (13)
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)
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]])
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)
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 NumPy .
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]]
Para aclarar la respuesta de Reed.
import numpy
numpy.set_printoptions(threshold=numpy.nan)
Tenga en cuenta que la respuesta como se indica arriba funciona con una inicial from numpy import *
, lo cual no es recomendable.
Para obtener la documentación completa, consulte http://docs.scipy.org/doc/numpy/reference/generated/numpy.set_printoptions.html .
Para estos que les gusta importar como np:
import numpy as np
np.set_printoptions(threshold=np.nan)
También funcionará
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]
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.
Supongamos que tienes una matriz numpy
for row in arr:
print row
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
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)
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):
if ''threshold'' not in kwargs:
kwargs[''threshold''] = np.nan
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.set_printoptions(threshold=numpy.nan)
complemento a esta answer 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.
arr = numpy.arange(10000).reshape(250,40)
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 salida, debe agregar la opción de compilación "word_wrap": false
al archivo de compilación sublime [ source ].
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.
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.