Cuando imprimo una matriz numpy, obtengo una representación truncada, pero quiero la matriz completa.
¿Hay alguna forma 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]])

np.inf?np.nany'nan'solo funciona por casualidad total, y'nan'ni siquiera funciona en Python 3 porque cambiaron la implementación de comparación de tipo mixto quethreshold='nan'dependía.threshold=np.nanEn lugar de'nan'depende de un golpe de suerte diferente, que es que la lógica de impresión array compara el tamaño de la matriz con el umbral cona.size > _summaryThreshold. Este siempre devuelveFalsepara_summaryThreshold=np.nan. Si la comparación había sidoa.size <= _summaryThreshold, probando si la matriz debe estar completamente impreso en lugar de probar si debe resumido, este umbral desencadenaría un resumen para todas las matrices.)tmpsololist(tmp). Otras opciones con formato diferente sontmp.tolist()o para un mayor controlprint("\n".join(str(x) for x in tmp)).Respuestas:
Uso
numpy.set_printoptions:fuente
numpymatriz solo una vez, desafortunadamente esta solución tiene la desventaja de requerir que restablezca este cambio de configuración después de realizar la impresión.Sugiero usar en
np.influgar de lonp.nanque otros sugieren. Ambos funcionan para su propósito, pero al establecer el umbral en "infinito", es obvio que todos leen su código a lo que se refiere. Tener un umbral de "no un número" me parece un poco vago.fuente
np.set_printoptions(threshold=1000)lo revertirá al comportamiento predeterminado. Pero puede establecer este umbral tan bajo o alto como desee.np.set_printoptions(threshold=np.inf)simplemente cambia el tamaño máximo que puede tener una matriz impresa antes de que se trunca a infinito, de modo que nunca se trunca, por grande que sea. Si establece el umbral en cualquier número real, ese será el tamaño máximo.np.inf,np.nano'nan'. Independientemente de lo que coloque allí, NumPy seguirá utilizando un plano>para comparar el tamaño de la matriz con su umbral.np.nansolo funciona porque es ena.size > _summaryThresholdlugar dea.size <= _summaryThreshold, ynp.nanregresaFalsepara todas>/</>=/<=comparaciones.'nan'solo funciona debido a los detalles de implementación frágiles de la lógica de comparación de tipo mixto de Python 2; se rompe por completo en Python 3.np.get_printoptions()['threshold']. Puede almacenar este valor antes de establecer el umbral y luego restaurarlo (o usar unwithbloque como se sugiere en otras respuestas).Las respuestas anteriores son las correctas, pero como una alternativa más débil puede transformarse en una lista:
fuente
NumPy 1.15 o más reciente
Si usa NumPy 1.15 (lanzado el 23-07-2018) o más reciente, puede usar el
printoptionsadministrador de contexto:(por supuesto, reemplace
numpypornpsi así fue como importónumpy)El uso de un administrador de contexto (el
withbloque) asegura que después de que el administrador de contexto haya finalizado, las opciones de impresión volverán a ser lo que eran antes de que comenzara el bloque. Asegura que la configuración es temporal y solo se aplica al código dentro del bloque.Consulte la
numpy.printoptionsdocumentación para obtener detalles sobre el administrador de contexto y qué otros argumentos admite.fuente
Esto suena como si estuvieras usando numpy.
Si ese es el caso, puede agregar:
Eso desactivará la impresión de la esquina. Para obtener más información, consulte este Tutorial de NumPy .
fuente
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representationAquí hay una manera única de hacer esto, que es útil si no desea cambiar su configuración predeterminada:
fuente
'nan',np.nanni ninguno de los anteriores. No es compatible, y este mal consejo está causando dolor a las personas que hacen la transición a Python 3numpy.set_printoptions(threshold=numpy.inf)Usando un administrador de contexto como Paul Price sugirió
fuente
np.printoptionsnumpy.savetxto si necesitas una cadena:
El formato de salida predeterminado es:
y se puede configurar con más argumentos.
Observe en particular cómo esto tampoco muestra los corchetes y permite una gran cantidad de personalización, como se menciona en: ¿Cómo imprimir una matriz Numpy sin corchetes?
Probado en Python 2.7.12, numpy 1.11.1.
fuente
Esta es una ligera modificación (eliminó la opción de pasar argumentos adicionales a la respuesta
set_printoptions)de Neok .Muestra cómo puede usar
contextlib.contextmanagerpara crear fácilmente un administrador de contexto con menos líneas de código:En su código se puede usar así:
fuente
try/finallyalrededor deyielden un administrador de contexto, para que la limpieza ocurra sin importar qué.with np.printoptions(threshold=np.inf):Complementario a esta respuesta del número máximo de columnas (fijado con
numpy.set_printoptions(threshold=numpy.nan)), también hay un límite de caracteres que se mostrarán. En algunos entornos, como cuando se llama a python desde bash (en lugar de la sesión interactiva), esto se puede solucionar configurando el parámetro de lalinewidthsiguiente manera.En este caso, su ventana debería limitar el número de caracteres para ajustar la línea.
Para aquellos que usan texto sublime y desean ver resultados dentro de la ventana de salida, deben agregar la opción
"word_wrap": falsede compilación al archivo de compilación sublime [ fuente ].fuente
Desde la versión 1.16 de NumPy, para más detalles ver el boleto 12251 de GitHub .
fuente
Para apagarlo y volver al modo normal
fuente
threshold=0, lo que significa "truncar lo antes posible", no lo que quiere en absoluto.Supongamos que tienes una matriz numpy
Si desea imprimir la matriz completa de una sola vez (sin alternar np.set_printoptions), pero quiere algo más simple (menos código) que el administrador de contexto, simplemente haga
fuente
Una ligera modificación: (ya que va a imprimir una gran lista)
Esto aumentará el número de caracteres por línea (ancho de línea predeterminado de 75). Use cualquier valor que desee para el ancho de línea que se adapte a su entorno de codificación. Esto le ahorrará tener que pasar por una gran cantidad de líneas de salida al agregar más caracteres por línea.
fuente
Puedes usar la
array2stringfunción - docs .fuente
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representationNo siempre querrá que se impriman todos los elementos, especialmente para matrices grandes.
Una forma sencilla de mostrar más elementos:
Funciona bien cuando la matriz en rodajas <1000 por defecto.
fuente
Si tienes pandas disponibles,
evita el efecto secundario de requerir un reinicio de
numpy.set_printoptions(threshold=sys.maxsize)y no obtienes numpy.array y corchetes. Me parece conveniente para volcar una amplia gama en un archivo de registrofuente
Si una matriz es demasiado grande para imprimirse, 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 la matriz completa, puede cambiar las opciones de impresión usando
set_printoptions.o
También puede consultar la documentación de numpy documentación de numpy para "o parte" para obtener más ayuda.
fuente
'nan',np.nanni ninguno de los anteriores. No es compatible, y este mal consejo está causando dolor a las personas que hacen la transición a Python 3ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation