Random Liste (Anzahl Elemente variabel und in Float)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

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
fff gh
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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...
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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<<
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

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
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

HerrHagen hat geschrieben: Zudem lassen sich noch eine ganz Reihe weiterer Verteilungen erzeuen.
Das kann das Random-Modul auch. :)
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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()? ;-)
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

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
fff gh
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

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
Zuletzt geändert von jbs am Dienstag 15. Dezember 2009, 13:12, insgesamt 1-mal geändert.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Was heißt denn "funktioniert nicht"?
Das Leben ist wie ein Tennisball.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

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<<
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

EyDu hat geschrieben:Was heißt denn "funktioniert nicht"?
Und: Was heißt das ;-)

Mit so ungenauen Angaben lässt sich nicht viel anfangen.
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

ahh

jetzt gehts :)

thx
fff gh
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Kein Problem.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

gooogle hat geschrieben:ahh

jetzt gehts :)

thx
Jetzt ist von dem das nur noch ein s übrig geblieben ;-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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!"
Antworten