Quando imprimo uma matriz numpy, obtenho uma representação truncada, mas quero a matriz completa.
Há alguma maneira de fazer isso?
Exemplos:
>>> 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
e'nan'
funcionam apenas por acaso total, e'nan'
nem funcionam no Python 3 porque eles mudaram a implementação de comparação de tipo misto da qualthreshold='nan'
dependiam.threshold=np.nan
vez de'nan'
depender de um acaso diferente, ou seja, a lógica de impressão da matriz compara o tamanho da matriz com o limitea.size > _summaryThreshold
. Isso sempre retornaFalse
para_summaryThreshold=np.nan
. Se a comparação tivesse sidoa.size <= _summaryThreshold
, testando se a matriz deveria ser totalmente impressa em vez de testar se deveria ser resumido, esse limite acionaria o resumo de todas as matrizes.)tmp
apenaslist(tmp)
. Outras opções com formatação diferente sãotmp.tolist()
ou para maior controleprint("\n".join(str(x) for x in tmp))
.Respostas:
Use
numpy.set_printoptions
:fonte
numpy
matriz apenas uma vez, infelizmente esta solução tem o lado negativo de exigir que você redefina essa alteração na configuração depois de fazer a impressão.Eu sugiro usar em
np.inf
vez donp.nan
que é sugerido por outros. Ambos funcionam para o seu propósito, mas, ao definir o limite como "infinito", é óbvio para todos que leem o seu código o que você quer dizer. Ter um limiar de "não um número" parece um pouco vago para mim.fonte
np.set_printoptions(threshold=1000)
o reverterá para o comportamento padrão. Mas você pode definir esse limite como baixo ou alto quanto desejar.np.set_printoptions(threshold=np.inf)
simplesmente altera o tamanho máximo que uma matriz impressa pode ter antes de ser truncada para infinita, para que nunca seja truncada, por maior que seja. Se você definir o limite como qualquer número real, esse será o tamanho máximo.np.inf
,np.nan
ou'nan'
. Tudo o que você colocar lá, o NumPy ainda usará um plano>
para comparar o tamanho da matriz com o seu limite.np.nan
só acontece com o trabalho porque éa.size > _summaryThreshold
, em vez dea.size <= _summaryThreshold
, enp.nan
retornaFalse
para todos os>
/<
/>=
/<=
comparações.'nan'
só funciona devido a detalhes frágeis da implementação da lógica de comparação de tipo misto do Python 2; ele quebra completamente no Python 3.np.get_printoptions()['threshold']
. Você pode armazenar esse valor antes de definir o limite e depois restaurá-lo (ou usar umwith
bloco conforme sugerido em outras respostas).As respostas anteriores são as corretas, mas como uma alternativa mais fraca, você pode se transformar em uma lista:
fonte
NumPy 1.15 ou mais recente
Se você usa o NumPy 1.15 (lançado em 23-07-2018) ou mais recente, pode usar o
printoptions
gerenciador de contexto:(é claro, substitua
numpy
pornp
se é assim que você importounumpy
)O uso de um gerenciador de contexto (o
with
-block) garante que, após a conclusão do gerenciador de contexto, as opções de impressão retornem ao que estavam antes do início do bloco. Ele garante que a configuração seja temporária e aplicada apenas ao código dentro do bloco.Consulte a
numpy.printoptions
documentação para obter detalhes sobre o gerenciador de contexto e quais outros argumentos ele suporta.fonte
Parece que você está usando numpy.
Se for esse o caso, você pode adicionar:
Isso desativará a impressão de canto. Para mais informações, consulte este tutorial do NumPy .
fonte
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Aqui está uma maneira única de fazer isso, que é útil se você não quiser alterar suas configurações padrão:
fonte
'nan'
,,np.nan
ou qualquer dos itens acima. É sem suporte, e este conselho mau está causando dor para pessoas transição para python 3numpy.set_printoptions(threshold=numpy.inf)
Usando um gerenciador de contexto como Paul Price sugeriu
fonte
np.printoptions
numpy.savetxt
ou se você precisar de uma string:
O formato de saída padrão é:
e pode ser configurado com outros argumentos.
Observe em particular como isso também não mostra os colchetes, e permite muita personalização, como mencionado em: Como imprimir um array Numpy sem colchetes?
Testado em Python 2.7.12, numpy 1.11.1.
fonte
Essa é uma pequena modificação (removida a opção de passar argumentos adicionais para a resposta
set_printoptions)
de neok .Ele mostra como você pode usar
contextlib.contextmanager
para criar facilmente um gerenciador de contexto com menos linhas de código:No seu código, ele pode ser usado assim:
fonte
try
/ emfinally
torno doyield
em um gerenciador de contexto, para que a limpeza aconteça, não importa o quê.with np.printoptions(threshold=np.inf):
Complementar a esta resposta do número máximo de colunas (fixo com
numpy.set_printoptions(threshold=numpy.nan)
), também há um limite de caracteres a serem exibidos. Em alguns ambientes, como ao chamar python do bash (em vez da sessão interativa), isso pode ser corrigido definindo o parâmetro dalinewidth
seguinte maneira.Nesse caso, sua janela deve limitar o número de caracteres para quebrar a linha.
Para aqueles que usam o texto sublime e desejam ver os resultados na janela de saída, adicione a opção
"word_wrap": false
de compilação ao arquivo de compilação sublime [ origem ].fonte
Desde a versão 1.16 do NumPy, para obter mais detalhes, consulte o ticket 12251 do GitHub .
fonte
Para desligá-lo e retornar ao modo normal
fonte
threshold=0
, o que significa "truncar o mais rápido possível" - e não o que você deseja.Suponha que você tenha uma matriz numpy
Se você deseja imprimir a matriz completa de uma maneira única (sem alternar np.set_printoptions), mas deseja algo mais simples (menos código) do que o gerenciador de contexto, basta
fonte
Uma pequena modificação: (já que você vai imprimir uma lista enorme)
Isso aumentará o número de caracteres por linha (largura de linha padrão de 75). Use qualquer valor que você desejar para a largura de linha adequada ao seu ambiente de codificação. Isso evitará que você precise passar por um grande número de linhas de saída adicionando mais caracteres por linha.
fonte
Você pode usar a
array2string
função - docs .fonte
ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation
Você nem sempre deseja que todos os itens sejam impressos, especialmente para matrizes grandes.
Uma maneira simples de mostrar mais itens:
Funciona bem quando a matriz fatiada <1000 por padrão.
fonte
Se você tem pandas disponíveis,
evita o efeito colateral de exigir uma redefinição de
numpy.set_printoptions(threshold=sys.maxsize)
e você não obtém o numpy.array e colchetes. Acho isso conveniente para despejar uma grande variedade em um arquivo de logfonte
Se uma matriz for muito grande para ser impressa, o NumPy ignorará automaticamente a parte central da matriz e imprimirá apenas os cantos: Para desativar esse comportamento e forçar o NumPy a imprimir a matriz inteira, você pode alterar as opções de impressão usando
set_printoptions
.ou
Você também pode consultar a documentação numpy documentação numpy para "ou parte" para obter mais ajuda.
fonte
'nan'
,,np.nan
ou qualquer dos itens acima. Não é suportado, e esse péssimo conselho está causando dor para as pessoas que estão migrando para o python 3ValueError: threshold must be numeric and non-NAN, try sys.maxsize for untruncated representation