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
Was ist denn

Code: Alles auswählen

daten.shape
?

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

das andere Ding war auch mein eigener Fehler.
wenn man einen Wert auf 6 setzt sollte man ihn anderweitig nicht überschreiben.