Seite 1 von 1
reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 15:25
von smith0815
Hi
es ist sicher ein einfaches Problem, aber ich finde keine Lösung,
Ich habe ein eindimensionales Numpy-Array (Name: daten) , welches ich einem Muster anpassen möchte.
Daher:
breite = 7
daten = daten.reshape.(-1, breite)
Aber beim kompilieren kommt dann:
ValueError: total size of new array must be unchanged
kann mir das einer erklären bzw. eine Lösung anbieten?
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 16:01
von BlackJack
@smith0815: Die Rechnung muss natürlich ”aufgehen”, d.h. die neue Form muss alle Elemente des Arrays verwenden. Nicht mehr und auch nicht weniger. Bei dem konkreten Beispiel muss die Anzahl der Elemente durch 7 teilbar sein. Wie sollte auch sonst das Ergebnis aussehen!?
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 16:02
von hendrikS
Es bedeutet, dass Dein Array vor dem Reshape Versuch mehr oder weniger als 7 Elemente hatte.
Beispielsweise kannst Du 4x4 in 8x2, 2x8, 1x16 oder 16x1 verändern. Alles andere führt zur o.g. Fehlermeldung.
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 16:46
von smith0815
ich hab noch mal nachgeschaut bzw. nachgezählt
es sollen 6 Spalten sein
und es gibt insgesamt 29544 Datensätze
d.h. es sollte funktionieren, denn:
29544 : 6 = 4924
doch leider klappt das auch nicht, mit selbem Fehler
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 17:01
von hendrikS
Beispiel:
Code: Alles auswählen
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6, 7, 8])
np.reshape(a,(2,4))
Jetzt sollte es klar sein, oder?
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 17:40
von CM
@ smith0815: 6 != 7
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 17:49
von smith0815
habs in 6 geändert und der Fehler bleibt
aber mit den Daten stimmt auch was nicht, es sollten viel mehr sein.
ich werde das mal kontrollieren
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 17:52
von CM
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 18:16
von smith0815
es scheint ein Problem beim Einlesen der Daten zu geben.
Ich habe ein Textfile mit 6 Spalten, jeweils mit Zahlen gefüllt leider sind nicht alle Daten vorhanden,
daher sind die fehlenden mit *** gekennzeichnet.
Ich lese die Daten mit:
fromfile(pfad,dtype='f4',sep=" ")
wobei er wohl ein Problem mit den *** hat und abbricht.
Jetzt habe ich das Einlesen manuell laufen und das dauert Zzzzz
Es sind insgesamt über 400.000 Datensätze und jeweils 6 Spalten
daher sind die lumpigen 30.000 Datenfelder etwas wenig.
kennt jemand ne schnellere Möglichkeit (ähnlich der fromfile-Version)
mit dem ich die Zahlen und die Sternchen einlesen kann?
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 18:59
von Darii
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 19:28
von smith0815
ich glaub, ich bin zu doof für Python
wie sieht denn der code für folgenden Text aus
Code: Alles auswählen
2 23.03 5.42 264 20 21438.00208
411 -70.22 -59.25 304 25 ************
311 23.13 -82.13 257 28 ************
bzw. Inhalt des Textfiles
fehlermeldung ist übrigens
Line #2 (got 12 columns instead of 11)
Line #3 (got 12 columns instead of 11)
Line #4 (got 10 columns instead of 11)
Line #5 (got 10 columns instead of 11)
Line #6 (got 10 columns instead of 11)
Line #8 (got 13 columns instead of 11)
Line #9 (got 13 columns instead of 11)
.
.
.
Line #398310 (got 9 columns instead of 11)
Line #398311 (got 9 columns instead of 11)
Mein Code ist:
Code: Alles auswählen
daten=np.genfromtxt(pfad,dtype='f4',delimiter=" ", missing_values="************")
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 20:19
von BlackJack
@smith0815: Wenn Du den Trenner als " " angibst, also ein Leerzeichen, dann geht die Funktion davon aus, dass der Trenner wirklich *genau ein* Leerzeichen ist. Zwei Leerzeichen nebeneinander trennen dann ein Feld in dem nichts drin steht. Lies Dir mal die Dokumentation zum `delimiter`-Argument durch.
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 20:39
von smith0815
das heißt ich muss den delimiter erweitert werden
Code: Alles auswählen
daten=np.genfromtxt(pfad,dtype='f4',delimiter=[" "," "," "," "], missing_values="************")
klappt leider auch nicht
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 21:18
von BlackJack
@smith0815: Lies noch mal was die Felder trennt, wenn Du *keinen* `delimiter` angibst.
Re: reshape bei numpy fehlgeschlagen
Verfasst: Montag 6. Juni 2011, 22:47
von smith0815
oh man
das andere Ding war auch mein eigener Fehler.
wenn man einen Wert auf 6 setzt sollte man ihn anderweitig nicht überschreiben.