Hoje caí em um problema que não tive antes. Preciso do "valor
infinito". Li em outro tópico que alguém usou um módulo chamado
fpconst, se não me engano, para conseguir a constante.
Tem alguma outra forma que não necessite de um módulo extra de
conseguir a constante infinito?
Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.
Talvez ele tenha dentro dele, embora eu tenha procurado, não
encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
fora dos limites dos meus dados, mas não deixa o algoritmo legível o
suficiente como seria se tivesse um "infinity" ali. Percebi também que
o fpconst é para floats, no meu caso apenas os inteiros são
necessários.
Obrigado.
--
Bruno Menegola
------------------------------------
,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html
Um float('inf') nao basta ?
>
> Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.
Qualquer um desses:
numpy.Inf, numpy.Infinity, numpy.inf, numpy.infty,
E talvez um mais especifico:
numpy.NINF, numpy.PINF
> Talvez ele tenha dentro dele, embora eu tenha procurado, não
> encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
> fora dos limites dos meus dados, mas não deixa o algoritmo legível o
> suficiente como seria se tivesse um "infinity" ali. Percebi também que
> o fpconst é para floats, no meu caso apenas os inteiros são
> necessários.
>
> Obrigado.
>
> --
> Bruno Menegola
>
>
--
-- Guilherme H. Polo Goncalves
Olá Bruno,
se voce est'a trabalhando só com inteiros mesmo,
não existe um valor que seja equivaletne a "infinito" matemático.
No entanto, python define a constante
sys.maxint (no módulo sys) - que é o maior número que um obejto
inteiro pode representar. Mas note que em python, sys.maxint + 1
simplesmetne faz um cast para o tipo "long" que para todos os
efeitos se comporta como o desejado. (Em C ou outra linguagem de mais
baixo nível, MAXINT +1 pode te dar -MAXINT, ou seja, nada mais
longe de qualquer resultado desejado matematicamente. Outras
linguagens podem gerar uma exceção de overflow).
Acredito que sys.maxint sirva ai paa seus propósitos, senão voce vai
ter uqe usar uma outra clssse de objetos para representar seus
números - se não me engano a classe decimal.Decimal
define "infinito", assim como os você encontrou o "fpconst" para
float.
abraços,
js
-><-
>
> Obrigado.
sim... é esse mesmo o módulo...
> Tem alguma outra forma que não necessite de um módulo extra de
> conseguir a constante infinito?
cara, tem... mas n é mt portável... vc pode fazer algo como
float("inf") mas em algumas máquinas n irá funcionar pq cada
plataforma representa as constantes especiais do padrão IEEE754 forma
diferente... num athlon se eu n m engano é algo como
float("#1.INF")... por isso se vc fizer float("inf") num athlon será
lançada uma exceção... o fpconst foi escrito justamente pra resolver
esse pbm...
> Se a informação ajudar, estou usando numpy pra um algoritmo de grafos.
> Talvez ele tenha dentro dele, embora eu tenha procurado, não
> encontrei. Poderia, sim, fazer uma gambiarra usando um valor que fique
> fora dos limites dos meus dados, mas não deixa o algoritmo legível o
> suficiente como seria se tivesse um "infinity" ali. Percebi também que
> o fpconst é para floats, no meu caso apenas os inteiros são
> necessários.
tecnicamente, inteiros em python são do tipo int ou long. Se vc usar
um inteiro muitíssimo grande ele será convertido para long
automaticamente... isso será transparente por isso não há limite para
os inteiros em python (só a memória). O que existe é o limite do tipo
'int' q pode ser obtido assim:
import sys
sys.maxint
acho que pro teu caso isso pode ser suficiente...
é isso... qlqr dúvida, tamos ae... :p
Sim, é verdade, num C++ o infinito é usando numeric_limits<int>::max()
que nada mais é que o maior valor para inteiros.
Mas não conhecia ainda o sys.maxint
2008/6/28 Guilherme Polo <ggp...@gmail.com>:
> Qualquer um desses:
> numpy.Inf, numpy.Infinity, numpy.inf, numpy.infty,
>
> E talvez um mais especifico:
> numpy.NINF, numpy.PINF
Obrigado! Mas infelizmente não há algo para inteiros pela razão que o
João Bueno comentou, certo?. A menos que o numpy implementasse alguma
coisa específica?
2008/6/28 Rafael Barreto <rafaelb...@gmail.com>:
> cara, tem... mas n é mt portável... vc pode fazer algo como
> float("inf") mas em algumas máquinas n irá funcionar pq cada
> plataforma representa as constantes especiais do padrão IEEE754 forma
> diferente... num athlon se eu n m engano é algo como
> float("#1.INF")... por isso se vc fizer float("inf") num athlon será
> lançada uma exceção... o fpconst foi escrito justamente pra resolver
> esse pbm...
Interessante, não sabia disso...
Obrigado a todos! Por enquanto acho que vou ficar com o sys.maxint, na
falta de algo melhor, pois fica mais próximo do que eu queria.
--
Bruno Menegola
Voce nao acha mais confiavel usar as constantes que o numpy define e
usa-las ja que voce esta usando o proprio numpy ?
--
-- Guilherme H. Polo Goncalves
------------------------------------
2008/6/28 Joao S. O. Bueno <gwi...@mpc.com.br>:
> Se voce estiver trabalhando com os pesos das arestas do grafo por que
> nao utiliza -1 pra definir o infinito?
Lembrem-se que inteiros no python viram longs automaticamente, então
sys.max_int não vai funcionar como vcs podem ver aqui:
>>> import sys
>>> sys.maxint
2147483647
>>> sys.maxint + 1
2147483648L
>>>
talvez de algum erro na hora de salvar esse longo de volta num array
do numpy, ou talvez inteiros vindos de arrays do numpy não virem
longs... mas ainda assim é arriscado.
Se tu continuar com a idéia de usar um valor máximo, lembre-se de
pegar o valor máximo do tipo usado pelo numpy, pois ele pode não ser o
sys.maxint, e tenha muito cuidado nas operações que tu fizer.
Usar infinito de floats realmente não vai funcionar:
>>> float('inf')
inf
>>> int(float('inf'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: cannot convert float infinity to long
A idéia do -1 é a que me parece mais sã.
--
Leonardo Santagada
Só se tiver uma constante de infinito para inteiros no numpy. Não dá
pra usar float pois os grafos são grandes e o numpy nem permite uma
matriz do tamanho necessário pois estoura minha memória.
2008/6/28 Gobr B. Black <gobr...@gmail.com>:
> Se voce estiver trabalhando com os pesos das arestas do grafo por que
> nao utiliza -1 pra definir o infinito?
Considerei o -1 sim. Eu só queria deixar mais explícito o valor
infinito, o maxint fica mais próximo disso e além do mais eu não
espero que nenhum peso chegue perto do maxint, de qualquer forma, se
chegar, então pode ter um deles que seja maxint+1 e, com a matriz de
int que estou usando, haverá uma exceção no numpy e minha idéia de
economizar memória vai por água abaixo :P
Obrigado!
--
Bruno Menegola
numpy.cast[numpy.int](numpy.inf)
Que vai ser relacionada ao sys.maxint
--
-- Guilherme H. Polo Goncalves
------------------------------------
Pq não:
infinito = -1
?
Daí é só usar essa "constante" ao longo do teu código.
--
Kao Cardoso Félix
Página pessoal: http://www.inf.ufrgs.br/~kcfelix
Blog: http://kaofelix.blogspot.com
--
Baggio
[As partes desta mensagem que não continham texto foram removidas]
Daria errado, sim, se você simplesmente fizesse a comparação com os
outros valores. No caso, a sugestão de usar -1 é uma forma de abstrair
a constante infinito que é impossível representar usando números
inteiros. Usando -1 como sendo infinito implica em fazer um teste
extra na hora de montar o seu algoritmo. Você teria que testar se o
número é < 0 ou >= 0, no caso de menor que zero, você considera o
valor como sendo infinito e daria o tratamento correto, senão faz a
comparação que você desejava no início. Tudo isso considerando que o
seu grafo não possua arestas com pesos negativos, obviamente, pois, se
existir, é necessário abordar de forma diferente a especificação do
infinito.
--
Bruno Menegola