Tengo curiosidad, si hay alguna forma de imprimir con formato numpy.arrays
, por ejemplo, de una manera similar a esta:
x = 1.23456
print '%.3f' % x
Si quiero imprimir los numpy.array
flotantes, imprime varios decimales, a menudo en formato 'científico', que es bastante difícil de leer incluso para matrices de baja dimensión. Sin embargo, numpy.array
aparentemente tiene que imprimirse como una cadena, es decir, con %s
. ¿Existe alguna solucion para esto?
python
numpy
python-2.x
pretty-print
camillio
fuente
fuente
Respuestas:
Puede usar
set_printoptions
para establecer la precisión de la salida:Y
suppress
suprime el uso de notación científica para números pequeños:Vea los documentos de set_printoptions para otras opciones.
Para aplicar opciones de impresión localmente , usando NumPy 1.15.0 o posterior, puede usar el administrador de contexto numpy.printoptions . Por ejemplo, dentro de
with-suite
precision=3
ysuppress=True
se establecen:Pero fuera de las
with-suite
opciones de impresión están de vuelta a la configuración predeterminada:Si está utilizando una versión anterior de NumPy, puede crear el administrador de contexto usted mismo. Por ejemplo,
Para evitar que los ceros se eliminen del final de los flotadores:
np.set_printoptions
ahora tiene unformatter
parámetro que le permite especificar una función de formato para cada tipo.que imprime
en vez de
fuente
print
, pero podría usar un administrador de contexto para hacer algo similar. He editado la publicación anterior para mostrar lo que quiero decir.np.set_printoptions(precision=3)
suprimir los ceros finales ... ¿cómo hacer que se muestren así[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
si desea una representación de cadena y no necesariamente usarlaprint
. Simplemente puede llamar__str__()
a la instancia de matriz numpy y obtendrá la cadena formateada según las impresiones que configuró.Puede obtener un subconjunto de la
np.set_printoptions
funcionalidad desdenp.array_str
comando, que se aplica solo a una sola declaración de impresión.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Por ejemplo:
fuente
Unutbu dio una respuesta realmente completa (también obtuvieron un +1 de mí), pero aquí hay una alternativa de baja tecnología:
Como una función (usando la
format()
sintaxis para formatear):Uso:
Se puede acceder al índice de la matriz en la cadena de formato:
fuente
FYI Numpy 1.15 (fecha de lanzamiento pendiente) incluirá un administrador de contexto para configurar las opciones de impresión localmente . Esto significa que lo siguiente funcionará igual que el ejemplo correspondiente en la respuesta aceptada (por unutbu y Neil G) sin tener que escribir su propio administrador de contexto. Por ejemplo, usando su ejemplo:
fuente
La gema que hace que sea demasiado fácil obtener el resultado como una cadena (en las versiones numpy de hoy) está oculta en la respuesta de denis:
np.array2string
fuente
Años después, otro está debajo. Pero para uso diario solo
fuente
Y esto es lo que uso, y es bastante sencillo:
fuente
Me sorprendió no ver el
around
método mencionado, lo que significa que no hay problemas con las opciones de impresión.fuente
A menudo quiero que diferentes columnas tengan diferentes formatos. Así es como imprimo una matriz 2D simple usando cierta variedad en el formato al convertir (cortes de) mi matriz NumPy en una tupla:
fuente
numpy.char.mod
también puede ser útil, dependiendo de los detalles de su aplicación, por ejemplo:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
devolverá una matriz de cadenas con los elementos "Valor = 5.00", "Valor = 5.10", etc. (como un ejemplo un tanto artificial).fuente
Las matrices numpy tienen el método
round(precision)
que devuelve una nueva matriz numpy con elementos redondeados en consecuencia.fuente
Me parece que el formato flotante habitual {: 9.5f} funciona correctamente, suprimiendo las anotaciones electrónicas de pequeño valor, cuando se muestra una lista o una matriz con un bucle. Pero ese formato a veces no puede suprimir su notación electrónica cuando un formateador tiene varios elementos en una sola declaración de impresión. Por ejemplo:
Mis resultados muestran el error en los casos 4, 5 y 6:
No tengo ninguna explicación para esto y, por lo tanto, siempre uso un bucle para la salida flotante de múltiples valores.
fuente
yo suelo
No es difícil modificarlo para matrices multidimensionales.
fuente
Otra opción más es usar el
decimal
módulo:fuente