[python-brasil] Criação de vetor aleatório

1,138 views
Skip to first unread message

kimeros

unread,
Mar 8, 2010, 4:29:28 PM3/8/10
to python...@yahoogrupos.com.br
 

Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
ou ajuda????

_______________________________________

vetor=[]
tam=input('Digite quantos valores seram incluidos')
for i in range(tam):
from random import*
i=randint(1,tam)
vetor.append(i)
print vetor

[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| 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. |
`-----------------------------------------------------------´
.

__,_._,___

Diego Manenti Martins

unread,
Mar 9, 2010, 6:11:55 AM3/9/10
to python...@yahoogrupos.com.br
 

testei aqui até 1000000 e não deu nada.

mudar de range para xrange diminui o consumo de memória.
o import também não deveria estar no meio do for.



2010/3/8 kimeros <darkkrusk@gmail.com>:
> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????
>
>
> _______________________________________
>
>    vetor=[]
>        tam=input('Digite quantos valores seram incluidos')
>        for i in range(tam):
>            from random import*
>            i=randint(1,tam)
>            vetor.append(i)
>        print vetor
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>

> ------------------------------------
>
> ,----------------------------------------------------------.


> | 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
>
>
>

--
diego

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| 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. |
`-----------------------------------------------------------´
.

__,_._,___

Luciano Ramalho

unread,
Mar 9, 2010, 6:08:38 AM3/9/10
to python...@yahoogrupos.com.br

2010/3/8 kimeros <darkkrusk@gmail.com>:
> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????
>
>
> _______________________________________
>
>    vetor=[]
>        tam=input('Digite quantos valores seram incluidos')
>        for i in range(tam):
>            from random import*
>            i=randint(1,tam)
>            vetor.append(i)
>        print vetor

Dicas:

0) A endentação do código está errada. Não dá para confiar em e-mails
para enviar código. Use o pastebin [1] ou similar e mande apenas o
link para cá
http://pastebin.com/

1) Não faça o import no meio do loop. Faça no início do programa. Deve
estar aí o problema.

2) Ao fazer randint(1, tam) você está gerando valores de 1 a tam-1. É
isso mesmo o que você quer?

3) Se quiser gerar um vetor com todos os valores de 1 a tam, sem
repetição, pode fazer assim:

from random import shuffle
vetor = shuffle(range(1, tam+1))

[ ]s
Luciano

--
"""
Many were increasingly of the opinion that they'd all made a big
mistake in coming down from the trees in the first place. And some
said that even the trees had been a bad move, and that no one should
ever have left the oceans. (DA/HHGTTG)
"""

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| 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. |
`-----------------------------------------------------------´
.

__,_._,___

Pedro Kroger

unread,
Mar 9, 2010, 11:09:35 AM3/9/10
to python...@yahoogrupos.com.br

2010/3/8 kimeros <darkkrusk@gmail.com>

> Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma dica
> ou ajuda????

em python anterior a 3.x range() mantem toda a lista criada por
range() na memoria enquanto xrange retorna um objeto iterável,
conservando memória. Provavelmente voce atingiu o limite de memoria.

Em geral nao é recomendado usar "from foo import *", veja a PEP8.

De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
todo o seu código pode ser resumido a:

import random

tam = input('Digite quantos valores seram incluidos: ')
print [random.randint(1, tam) for i in xrange(tam)]

Abraços,

Pedro

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| 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. |
`-----------------------------------------------------------´
.

__,_._,___

Christian S. Perone

unread,
Mar 9, 2010, 6:04:00 PM3/9/10
to python...@yahoogrupos.com.br
 

Da documentação do Python (http://docs.python.org/library/random.html):

To choose a sample from a range of integers, use an
xrange()<http://docs.python.org/library/functions.html#xrange>object
as an argument. This is especially
*fast and space efficient* for sampling from a large population:
sample(xrange(10000000), 60).

Se você estiver fazendo algo sério, e quiser uma implementação decente pra
essa geração de um vetor aleatório, deveria usar o Numpy.

Postei um benchmark das soluções propostas e adicionei uma utilizando o
Numpy (http://paste.pocoo.org/show/187702/), seguem os tempos que deram para
mim:

Tempo total (teste #1): 10.1679s
Tempo total (teste #2): 3.1838s
Tempo total (teste #3): 9.7410s
Tempo total (teste #4): 3.5267s
Tempo total (teste #5): 0.1241s --> este é o tempo utilizando o Numpy

- Christian S. Perone



2010/3/9 Pedro Kroger <pedro.kroger@gmail.com>

> 2010/3/8 kimeros <darkkrusk@gmail.com>
>
> > Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> > estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma
> dica
> > ou ajuda????
>
> em python anterior a 3.x range() mantem toda a lista criada por
> range() na memoria enquanto xrange retorna um objeto iterável,
> conservando memória. Provavelmente voce atingiu o limite de memoria.
>
> Em geral nao é recomendado usar "from foo import *", veja a PEP8.
>
> De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
> todo o seu código pode ser resumido a:
>
> import random
>
> tam = input('Digite quantos valores seram incluidos: ')
> print [random.randint(1, tam) for i in xrange(tam)]
>
> Abraços,
>
> Pedro
>
>

> ------------------------------------
>
> ,----------------------------------------------------------.


> | 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
>
>
>

--

"Forgive, O Lord, my little jokes on Thee, and I'll forgive Thy great big
joke on me."
http://pyevolve.sourceforge.net/wordpress/



[As partes desta mensagem que não continham texto foram removidas]

__._,_.___
Atividade nos últimos dias:
,-----------------------------------------------------------.
| 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. |
`-----------------------------------------------------------´
.

__,_._,___

kimeros

unread,
Mar 10, 2010, 10:32:16 PM3/10/10
to python...@yahoogrupos.com.br
Pessoal tive uma otima aula sobre pyhon!!!

Graças a vocês conheci um ambiente novo e uma forma bem eficiente de
implementar.

Obrigado a todos!!!

Em 9 de março de 2010 13:09, Pedro Kroger <pedro....@gmail.com> escreveu:

>
>
> 2010/3/8 kimeros <dark...@gmail.com <darkkrusk%40gmail.com>>


>
> > Implementei este algoritmo para criar um vetor aleatório, mas estou tendo
> > estouro quando o mesmo passa da casa dos 10000, alguem pode me dar uma
> dica
> > ou ajuda????
>
> em python anterior a 3.x range() mantem toda a lista criada por
> range() na memoria enquanto xrange retorna um objeto iterável,
> conservando memória. Provavelmente voce atingiu o limite de memoria.
>
> Em geral nao é recomendado usar "from foo import *", veja a PEP8.
>
> De qualquer forma, eu sugiro usar compreensào de listas nesse caso;
> todo o seu código pode ser resumido a:
>
> import random
>
> tam = input('Digite quantos valores seram incluidos: ')
> print [random.randint(1, tam) for i in xrange(tam)]
>
> Abraços,
>
> Pedro
>
>

[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

,-----------------------------------------------------------.
| 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


Reply all
Reply to author
Forward
0 new messages