Estou curioso para saber se existe alguma maneira de imprimir formatado numpy.arrays
, por exemplo, de uma maneira semelhante a esta:
x = 1.23456
print '%.3f' % x
Se eu quiser imprimir os numpy.array
carros alegóricos, ele imprime várias casas decimais, geralmente no formato 'científico', o que é bastante difícil de ler, mesmo para matrizes de baixa dimensão. No entanto, numpy.array
aparentemente, deve ser impresso como uma sequência, ou seja, com %s
. Existe uma solução para isso?
python
numpy
python-2.x
pretty-print
camillio
fonte
fonte
Respostas:
Você pode usar
set_printoptions
para definir a precisão da saída:E
suppress
suprime o uso de notação científica para pequenos números:Consulte os documentos para set_printoptions para outras opções.
Para aplicar opções de impressão localmente , usando o NumPy 1.15.0 ou posterior, você pode usar o gerenciador de contexto numpy.printoptions . Por exemplo, dentro de
with-suite
precision=3
esuppress=True
são definidos:Mas fora das
with-suite
opções de impressão, retornamos às configurações padrão:Se você estiver usando uma versão anterior do NumPy, poderá criar o gerenciador de contexto. Por exemplo,
Para impedir que os zeros sejam removidos do final dos flutuadores:
np.set_printoptions
agora possui umformatter
parâmetro que permite especificar uma função de formato para cada tipo.que imprime
ao invés de
fonte
print
, mas você pode usar um gerenciador de contexto para criar algo semelhante. Eu editei a postagem acima para mostrar o que quero dizer.np.set_printoptions(precision=3)
suprime os zeros finais .. como você os exibe como este[ 0.078 0.480 0.413 0.830 0.776 0.102 0.513 0.462 0.335 0.712]
?set_printoptions
se desejar uma representação de sequência e não necessariamente usarprint
. Você pode simplesmente chamar__str__()
a instância da matriz numpy e obterá a string formatada conforme as opções de impressão definidas.Você pode obter um subconjunto da
np.set_printoptions
funcionalidade nonp.array_str
comando, que se aplica apenas a uma única instrução de impressão.http://docs.scipy.org/doc/numpy/reference/generated/numpy.array_str.html
Por exemplo:
fonte
O Unutbu deu uma resposta realmente completa (eles também receberam um +1 de mim), mas aqui está uma alternativa de baixa tecnologia:
Como uma função (usando a
format()
sintaxe para formatar):Uso:
O índice da matriz está acessível na cadeia de formato:
fonte
O AY Numpy 1.15 (data de lançamento pendente) incluirá um gerenciador de contexto para definir as opções de impressão localmente . Isso significa que o seguinte funcionará da mesma forma que o exemplo correspondente na resposta aceita (por unutbu e Neil G) sem precisar escrever seu próprio gerenciador de contexto. Por exemplo, usando o exemplo deles:
fonte
A gema que facilita muito a obtenção do resultado como uma string (nas versões numpy de hoje) está oculta na resposta denis:
np.array2string
fonte
Anos depois, outro está abaixo. Mas para o uso diário, eu apenas
fonte
E aqui está o que eu uso, e é bastante simples:
fonte
Fiquei surpreso ao não ver o
around
método mencionado - significa não mexer nas opções de impressão.fonte
Muitas vezes, quero que colunas diferentes tenham formatos diferentes. Aqui está como eu imprimo uma matriz 2D simples usando alguma variedade na formatação, convertendo (fatias de) minha matriz NumPy em uma tupla:
fonte
numpy.char.mod
também pode ser útil, dependendo dos detalhes da sua aplicação, por exemplo:numpy.char.mod('Value=%4.2f', numpy.arange(5, 10, 0.1))
retornará uma matriz de caracteres com os elementos "Valor = 5,00", "Valor = 5,10" etc. (como um exemplo artificial).fonte
As matrizes numpy têm o método
round(precision)
que retorna uma nova matriz numpy com elementos arredondados de acordo.fonte
Acho que o formato de flutuação usual {: 9.5f} funciona corretamente - suprimindo notações eletrônicas de pequeno valor - ao exibir uma lista ou uma matriz usando um loop. Mas esse formato às vezes falha em suprimir sua notação eletrônica quando um formatador possui vários itens em uma única declaração de impressão. Por exemplo:
Meus resultados mostram o erro nos casos 4, 5 e 6:
Não tenho explicação para isso e, portanto, sempre uso um loop para saída flutuante de vários valores.
fonte
eu uso
Não é difícil modificá-lo para matrizes multidimensionais.
fonte
Ainda outra opção é usar o
decimal
módulo:fonte