zu viele Daten, was tun?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
hallo world2
User
Beiträge: 1
Registriert: Dienstag 10. November 2020, 10:43

Hallo liebe Community,

Ich habe folgendes Problem: Ich soll für eine wissenschaftliche Arbeit die statistischen Fehler als Gaußkurve darstellen. Dafür muss ich leider zu erst alle Kombinationen von Fehlern ermitteln, da später jeder Wert spezifisch verrechnet wird. Die Fehler verhalten sich nach dem Kugel-Schalen-Prinzip. Wir haben 5 Kugeln (im Programm die Zahlen 0-4) und 12 Schalen (das sind im Programm die stellen 1-12). Die Ergebnismenge wurde sehr schnell sehr groß, so dass der Texteditor (in dem ich es gespeichert habe) meinte, dass es zu viele Daten seien und er nicht weiter rechnet. Also wollte ich die Ergebnisse als 6 Dateien ausgeben und diese später zusammenfügen. Das Problem hierbei ist nun, dass ich gesagt habe, dass er ab der Stelle 3-4-4-4-4-4-4-4-4-4-0 in der nächsten Datei weiter schreiben soll. Dies tat er auch, in der ersten Datei waren jedoch nur die Werte bis 0-3-4-4-4-4-4-4-2-2-0-0 korrekt angegeben und danach fehlte der Rest. Es wäre toll, wenn mir jemand weiterhelfen könnte und mir sagen, wo der Fehler liegt/ ob man es komplett anders machen kann. Bin ein blutiger Anfänger und würde mich über neue Lösungswege/Verbesserungen sehr freuen. Anbei schicke ich euch noch den Python code, mit dem ich die ersten 2 Dateien gemacht habe :?

Mfg hallo_world2

datei3 = open("datei3.txt", "w")
datei4 = open("datei4.txt", "w")

a = [0,1,2,3,4]
for a in range (0,5):
for b in range (0,5):
for c in range (0,5):
for d in range (0,5):
for e in range (0,5):
for f in range (0,5):
for g in range (0,5):
for h in range (0,5):
for i in range (0,5):
for j in range (0,5):
for k in range (0,5):
for l in range (0,5):
if int(str(a)+str(b)+str(c)+str(d)+str(e)+str(f)+str(g)+str(h)+str(i)+str(j)+str(k)+str(l))<3444444444:
datei3.write(str (a) +"-" +str (b) +"-" + str (c) + "-" + str(d) +"-" + str(e) +"-" + str(f) +"-" + str(g) +"-" + str(h) +"-" + str(i) +"-" + str(j) +"-" +str(k) + "-" + str(l) + "\n")
elif int(str(a)+str(b)+str(c)+str(d)+str(e)+str(f)+str(g)+str(h)+str(i)+str(j)+str(k)+str(l))<44444444440:
datei4.write(str (a) +"-" +str (b) +"-" + str (c) + "-" + str(d) +"-" + str(e) +"-" + str(f) +"-" + str(g) +"-" + str(h) +"-" + str(i) +"-" + str(j) +"-" +str(k) + "-" + str(l) + "\n")
else: print("Nada")
datei3.cose()
datei4.close()
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@hallo world2: Schau Dir mal die Funktionen im `itertools`-Modul an. Die Schleifen musst Du nicht selbst schreiben.

`str()` und ``+`` um Zeichenketten und Werte zusammenzustückeln ist eher BASIC denn Python. Python hat dafür Zeichenkettenformatierung mit der `format()`-Methode oder f-Zeichenkettenliteralen. Wenn man das `itertools`-Modul verwendet bekommt man nicht 12 einzelne Variablen sondern eine Sequenz mit 12 werten, da kann man dann auch einfach die `join()`-Methode verwenden (und `map` und `str`).

Um den Iterator mit den ganzen Varianten beziehungsweise dann den Zeilenwerten aufzuteilen kann man selbst was schreiben, oder mal im externen `more_itertools` nach etwas passendem schauen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
narpfel
User
Beiträge: 688
Registriert: Freitag 20. Oktober 2017, 16:10

Wenn ich die Ziffern richtig gezählt habe, ist die erste Stelle immer Null, da kann man sich also 80 % der Arbeit sparen.

Wenn du die langen Zahlen als `3_444_444_444` und `44_444_444_440` schreibst, kann man das leichter lesen.
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die langen Zahlen sollten da eigentlich gar nicht so im Code stehen. Man würde eigentlich im Code ausrechnen wie viele Ergebnisse es insgesamt gibt und diese Zahl durch die Anzahl der Dateien teilen. Oder man würde eine feste Anzahl von Werten pro Datei festlegen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Benutzeravatar
__blackjack__
User
Beiträge: 13927
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@hallo world2: Was soll eigentlich das Ziel von dieser Aktion sein insgesamt 384 MiB an Daten in Textdateien zu generieren? Was soll mit diesen Textdateien dann gemacht werden?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten