Seite 1 von 1

Random Liste (Anzahl Elemente variabel und in Float)

Verfasst: Dienstag 15. Dezember 2009, 11:57
von gooogle
Hallo

ich möchte gerne eine Liste mit Zufallszahlen (Float) generieren. Anzahl der elemente variabel (mal 5, 10, mal 100 elemente...)
Ich habe zwar paar seiten gefunden die random behandeln aber nicht genau das was ich will..
ich möchte als beispiel eine liste mit 5 oder 100 elementen erzeugen, aber mit begrenzung (zB. Minimum 1.0 und maximum 5.0):

RandomList = [1.1, 2.6, 4.4, 3.2, 1.0]

Ist sowas ohne grossen aufwand möglich?
Ich konnte im netz leider nix auf die schnelle finden

gruss

Re: Random Liste (Anzahl Elemente variabel und in Float)

Verfasst: Dienstag 15. Dezember 2009, 12:07
von Hyperion
gooogle hat geschrieben: Ist sowas ohne grossen aufwand möglich?
Ja!
Ich konnte im netz leider nix auf die schnelle finden
Dann guck mal in die Doku ins random Modul! Da wirst Du fündig...

Verfasst: Dienstag 15. Dezember 2009, 12:19
von Masaru

Code: Alles auswählen

import random

list_count = 100
random_list = [ round(random.uniform(1.0, 5.0), 1) for r in xrange(list_count) ]
>>Masaru<<

Verfasst: Dienstag 15. Dezember 2009, 12:30
von Hyperion
So viel zum Lerneffekt ;-)

@Masaru: Wozu das round()? Und ich würde noch nen randint() ins xrange basteln... damit hat man dann den Zufall in der Länge erschlagen.

Verfasst: Dienstag 15. Dezember 2009, 12:38
von HerrHagen
it numpy kann man sogar direkt arrays mit zufallszahlen erstellen:

Code: Alles auswählen

>>> import numpy
>>> numpy.random.randint(0, 6, 10)
array([3, 3, 0, 5, 5, 3, 4, 3, 1, 4])
Das geht dann auch wesentlich schneller als mit dem random-Modul. Zudem lassen sich noch eine ganz Reihe weiterer Verteilungen erzeuen.

MFG HerrHagen

Verfasst: Dienstag 15. Dezember 2009, 12:40
von Rebecca
HerrHagen hat geschrieben: Zudem lassen sich noch eine ganz Reihe weiterer Verteilungen erzeuen.
Das kann das Random-Modul auch. :)

Verfasst: Dienstag 15. Dezember 2009, 12:41
von Hyperion
HerrHagen hat geschrieben:it numpy kann man sogar direkt arrays mit zufallszahlen erstellen:

Code: Alles auswählen

>>> import numpy
>>> numpy.random.randint(0, 6, 10)
array([3, 3, 0, 5, 5, 3, 4, 3, 1, 4])
Das geht dann auch wesentlich schneller als mit dem random-Modul. Zudem lassen sich noch eine ganz Reihe weiterer Verteilungen erzeuen.

MFG HerrHagen
Er will aber floats haben :-P

oder gibt es auch randfloat()? ;-)

Verfasst: Dienstag 15. Dezember 2009, 13:09
von gooogle
hallo

danke für den tipp ;), aber das funktioniert nicht so ganz. das ist der output:

[1.3, 1.1000000000000001, 1.0, 4.0999999999999996, 3.2000000000000002]
[3.2000000000000002, 2.8999999999999999, 3.2000000000000002, 2.0, 4.2999999999999998]
[4.2000000000000002, 4.0999999999999996, 1.1000000000000001, 2.2999999999999998, 1.6000000000000001]
[4.0999999999999996, 3.1000000000000001, 4.0, 4.5999999999999996, 2.7000000000000002]
[1.6000000000000001, 2.7999999999999998, 3.2999999999999998, 1.6000000000000001, 3.3999999999999999]
[1.7, 4.7000000000000002, 3.7000000000000002, 3.7999999999999998, 4.7999999999999998]
[3.7000000000000002, 2.2000000000000002, 1.3999999999999999, 3.8999999999999999, 2.5]
[3.5, 3.2999999999999998, 2.3999999999999999, 2.6000000000000001, 3.2999999999999998]
[4.4000000000000004, 3.6000000000000001, 3.2000000000000002, 4.5, 1.3]
[4.9000000000000004, 2.3999999999999999, 2.7999999999999998, 4.2000000000000002, 4.9000000000000004]
[2.2000000000000002, 4.0, 4.5999999999999996, 3.6000000000000001, 2.8999999999999999]

??

das random scheint zu hacken :P

Verfasst: Dienstag 15. Dezember 2009, 13:10
von jbs
Das liegt am ungenauen float.

Code: Alles auswählen

>>> x = 10
>>> for i in range(10):
...     x-=0.1
...
>>> x
9.0000000000000036
>>> x == 9
False
>>> x == 9.0
False

Verfasst: Dienstag 15. Dezember 2009, 13:11
von EyDu
Was heißt denn "funktioniert nicht"?

Verfasst: Dienstag 15. Dezember 2009, 13:15
von Masaru
gooogle hat geschrieben: ...
das random scheint zu hacken :P
Nein, random hakt nicht, sondern die Objekt-Präsentationsweise der Float-Liste in deiner Interpreter-Console.

Ich vermute mal Du hast folgendes gemacht:

Code: Alles auswählen

>>> import random
>>> import random
>>> list_count = 5
>>> random_list = [ round(random.uniform(1.0, 5.0), 1) for r in xrange(list_count) ]
>>> random_list
[3.7000000000000002, 3.1000000000000001, 4.7999999999999998, 2.7999999999999998, 4.7999999999999998]
Anstelle "random_list" direkt aufzurufen, probier mal folgendes:

Code: Alles auswählen

>>> for r in random_list: print r
Dann solltest Du folgendes sehen:

Code: Alles auswählen

... 
3.7
3.1
4.8
2.8
4.8
>>Masaru<<

Verfasst: Dienstag 15. Dezember 2009, 13:19
von Hyperion
EyDu hat geschrieben:Was heißt denn "funktioniert nicht"?
Und: Was heißt das ;-)

Mit so ungenauen Angaben lässt sich nicht viel anfangen.

Verfasst: Dienstag 15. Dezember 2009, 13:19
von gooogle
ahh

jetzt gehts :)

thx

Verfasst: Dienstag 15. Dezember 2009, 13:20
von Masaru
Kein Problem.

Verfasst: Dienstag 15. Dezember 2009, 13:20
von Hyperion
gooogle hat geschrieben:ahh

jetzt gehts :)

thx
Jetzt ist von dem das nur noch ein s übrig geblieben ;-)

Verfasst: Dienstag 15. Dezember 2009, 13:22
von EyDu
Hyperion hat geschrieben:
EyDu hat geschrieben:Was heißt denn "funktioniert nicht"?
Und: Was heißt das ;-)
Na das das:
gooogle hat geschrieben:aber das funktioniert nicht so ganz
;-)

Verfasst: Dienstag 15. Dezember 2009, 14:17
von /me
Hyperion hat geschrieben:oder gibt es auch randfloat()? ;-)
Klar. Sogar mit einstellbarer Zahl von Vor und Nachkommastellen:

Code: Alles auswählen

In [1]: import random

In [2]: def randfloat(v, n):
   ...:     i = "".join([str(random.randint(0, 9)) for _ in xrange(v)])
   ...:     j = "".join([str(random.randint(0, 9)) for _ in xrange(n)])
   ...:     return float(i + "." + j)
   ...:

In [3]: randfloat(3, 5)
Out[3]: 224.64043
:D

"Kids, don't do this at home!"