Pregunta

Al imprimir una matriz numpy, me sale una representación truncada, pero quiero toda la gama.

¿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]])
¿Fue útil?

Solución

numpy.set_printoptions :

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

Otros consejos

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

sugiere emplear np.inf en lugar de np.nan que se sugiere por otros. Ambos trabajan para su propósito, pero ajustando el umbral a "infinito" es obvio a todo el mundo la lectura de su código a qué se refiere. Tener un umbral de "no es un número" parece un poco vago para mí.

Las respuestas anteriores son las correctas, sino como una alternativa más débil que pueden 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 que está utilizando numpy.

Si ese es el caso, se puede añadir:

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

Esto desactivará la impresión de esquina. Para obtener más información, consulte esta NumPy Tutorial .

Aquí es un hecho aislado manera de hacer esto, lo cual es útil si no desea cambiar la configuración por defecto:

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)

El uso de un gestor de contexto como Paul Price 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 1.15 o más reciente

Si utiliza NumPy 1.15 (publicado 23.07.2018) o posterior, puede utilizar el gestor de contexto printoptions:

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

(por supuesto, sustituir numpy por np si así es como se importaron numpy)

El uso de un gestor de contexto (el with-bloque) asegura que después de que el gestor de contexto está terminado, las opciones de impresión volverá a lo que estaban antes de que comenzara el bloque. Asegura el ajuste es temporal, y solo se aplicará al código dentro del bloque.

numpy.printoptions documentación para más información sobre el gestor de contexto y qué otros argumentos que soporta.

numpy.savetxt

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

o si necesita una cadena:

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

El formato de salida por defecto es:

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

y se puede configurar con más argumentos.

Nota en particular, cómo esto tampoco muestra los corchetes, y permite una gran cantidad de personalización, como se mencionó en: Cómo imprimir una matriz numpy sin paréntesis?

Probado en Python 2.7.12, numpy 1.11.1.

Esta es una ligera modificación (eliminado la opción de pasar argumentos adicionales para set_printoptions)of neok s respuesta.

Esto demuestra cómo se puede utilizar contextlib.contextmanager para crear fácilmente como una ContextManager 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 el código que puede ser utilizado como esto:

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)

complementaria a esta respuesta desde el número máximo de columnas (fijos con numpy.set_printoptions(threshold=numpy.nan)), también hay un límite de caracteres para ser mostrado. En algunos entornos, como cuando se llama a pitón de fiesta (en lugar de la sesión interactiva), esto se puede solucionar mediante el establecimiento de la linewidth parámetro de la siguiente manera.

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, la ventana debe limitar el número de caracteres para envolver la línea.

Para aquellos que por ahí el uso de texto sublime y con ganas de ver los resultados dentro de la ventana de salida, se debe añadir la opción de generación "word_wrap": false al archivo sublime y construcción [ fuente ].

Para apagarlo y volver al modo normal

np.set_printoptions(threshold=False)

Suponga que tiene una matriz numpy

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

Si desea imprimir toda la gama en un camino de una sola vez (sin alternar np.set_printoptions), pero si quieres algo más simple (menos código) que el gestor de contexto, acaba de hacer

for row in arr:
     print row 

Puede utilizar 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 NumPy versión 1.16, para más detalles ver billete GitHub 12251 .

from sys import maxsize
from numpy import set_printoptions

set_printoptions(threshold=maxsize)

no siempre desea que todos los elementos impresos, especialmente para las grandes matrices.

Una forma sencilla de mostrar más elementos:

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

Trabaja muy bien al corte array <1,000 por defecto.

Si una matriz es demasiado grande para ser impreso, NumPy salta automáticamente la parte central de la matriz y sólo imprime las esquinas: Para desactivar este comportamiento y forzar NumPy para imprimir toda la matriz, puede cambiar las opciones de impresión que utiliza 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 referirse a la numpy documentación numpy documentación "o parte" para obtener más ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top