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.nan
y'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.nan
En 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 devuelveFalse
para_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.)tmp
sololist(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
numpy
matriz 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.inf
lugar de lonp.nan
que 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.nan
o'nan'
. Independientemente de lo que coloque allí, NumPy seguirá utilizando un plano>
para comparar el tamaño de la matriz con su umbral.np.nan
solo funciona porque es ena.size > _summaryThreshold
lugar dea.size <= _summaryThreshold
, ynp.nan
regresaFalse
para 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 unwith
bloque 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
printoptions
administrador de contexto:(por supuesto, reemplace
numpy
pornp
si así fue como importónumpy
)El uso de un administrador de contexto (el
with
bloque) 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.printoptions
documentació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 representation
Aquí hay una manera única de hacer esto, que es útil si no desea cambiar su configuración predeterminada:
fuente
'nan'
,np.nan
ni 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.printoptions
numpy.savetxt
o 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.contextmanager
para crear fácilmente un administrador de contexto con menos líneas de código:En su código se puede usar así:
fuente
try
/finally
alrededor deyield
en 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 lalinewidth
siguiente 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": false
de 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
array2string
función - docs .fuente
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
No 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.nan
ni 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