Komischer Fehler in Scipy unter Windows, nicht in Linux

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
Arp
User
Beiträge: 65
Registriert: Dienstag 15. März 2011, 13:21

Hallo,

Ich nutze das Scipy paket um fouriertransformationen eines Bildes zu berechne. Es ist das Scipy.fftpack paket.

Ich habe das kleine Programm erst unter Ubuntu geschrieben und wollte es nun auf Windows weiter schreiben weil da noch ein paar sachen dazu kommen die ich in Ubuntu nicht kann.

Ich hab nun also mein Bild, in form eines 2D numpy arrays, data.
der befehl fft1 = fftpack.fft(data) klappt unter ubuntu problemlos.
Unter Windows 7 meldet es aber den Fehler: ValueError: type > f4 is not supported

Das sagte mir so nun gar nichts, und google meint, f4 entspricht hierbei 32 bit. Ich dachte nun, das in dem datenarray vielleicht zahlen mit mehr als 32 bit drin sind, aber ein kurzer test ob alle einträge vom typ numpy.float32 sind, zeigte, das alles nur 32 bit zahlen sind. Nun steh ich aufm schlauch....

Liegt es vll daran das ich ein 32 bit python unter windows 7 64 bit laufen habe?

Habt ihr da ne Idee?
Thx.
BlackJack

@Arp: Der Typ ist nicht 'f4' sondern '>f4'. Die Byte-Reihenfolge ist also „big endian“, was unter einem Windows-System nicht „native“ sein dürfte, und daran stört sich die Funktion. Da hat es wohl eine Änderung in 0.8.x gegeben. Davor hat die Funktion das Array selbst umgewandelt. In 0.9.0 tut sie das wohl auch wieder. Könnte also an der Scipy-Version liegen.

Falls es daran liegen sollte, kommt jetzt also darauf an ob es für Dich einfacher ist das Array an der Stelle manuell in den passenden Typ zu konvertieren, oder eine Scipy-Version zu installieren wo das Phänomen nicht auftritt.
Arp
User
Beiträge: 65
Registriert: Dienstag 15. März 2011, 13:21

Danke für die Erkläung.

Ich hab allerdings scipy 0.10. da tritt der fehler auf. In 0.9 auch. 0.8 gibts leider nicht für python 2.7, und 2.6 find ich nicht für windows auf der python hauptseite.

Kannst du zufällig kurz erklären wie ich das array umwandel?
thx.
BlackJack

@Arp: Die `byteswap()`-Methode oder die `astype()`-Methode könntest Du mal ausprobieren.
Antworten