reshape bei numpy fehlgeschlagen

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
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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?
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!?
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

@ smith0815: 6 != 7
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Was ist denn

Code: Alles auswählen

daten.shape
?
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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?
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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="************")
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.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

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
BlackJack

@smith0815: Lies noch mal was die Felder trennt, wenn Du *keinen* `delimiter` angibst.
smith0815
User
Beiträge: 99
Registriert: Dienstag 13. April 2010, 11:08

oh man
:oops:

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