Ich habe Probleme mit der Durchführung von 2D-Fast-Fourier-Transformationen auf einem 3D-Array. Sie sind mathematischer Natur und von einem "Verständnis Python / Numpy" Natur.
EDIT: Zur Klarstellung: Die Kernfragen lauten: Wie geht numpy.fft mit maskierten Arrays um? Kann ich den Durchschnitt über eine Achse bilden und dann eine fft durchführen und das gleiche Ergebnis erhalten wie bei einer fft und dann den Durchschnitt über die Achsen bilden, die nicht an der fft beteiligt waren?
Das Feld besteht aus einem Kohlendioxid-Flusswert (in "Einheiten") zwischen der Atmosphäre und dem Ozean für jeden Breiten- und Längengrad (in einem bestimmten Bereich). Die Form des Arrays ist (730, 50, 182) entsprechend (Zeit, Breitengrad, Längengrad). Die Landwerte werden maskiert:
import numpy as np
from numpy import ma
carbon_flux = ma.masked_values(carbon_flux, 1e+20)
Ich möchte den Logarithmus der Varianz der 2D-Fourier-Transformation von carbon_flux, gemittelt über den Längengrad, anzeigen. Ich mittle das Array über die letzte Achse (Längengrad) und führe dann die Fourier-Transformation wie folgt durch:
ft_type_1 = np.log(np.abs(np.fft.fft2(ma.mean(cflux, 2)))
So erhalte ich ein akzeptabel aussehendes Ergebnis. Mir wurde jedoch gesagt, ich solle zuerst die Mittelwertbildung vornehmen:
ft_type_2 = np.log(np.mean(np.abs(np.fft.fft2(carbon_flux, axes=(0, 1))),axis=2)
Dies führt dazu, dass die maskierten Werte zur Berechnung der fft verwendet werden (ich erkenne das daran, dass der erste Wert der fft in der Größenordnung von 10e19 liegt).
Soweit ich weiß, unterscheidet sich das Ergebnis der Mittelwertbildung vor dem fft von dem der Mittelwertbildung nach dem fft. Liege ich mit dieser Annahme richtig oder macht es keinen Unterschied, in welcher Reihenfolge ich diese Funktionen ausführe?
Verwendet die fft die maskierten Werte? Kann ich dies vermeiden?
Schließlich habe ich den Logarithmus der 2D-Fourier-Transformation von carbon_flux gemittelt über den Breitengrad berechnet. Ich verstehe nicht, wie man den Logarithmus der VARIANZ der über den Breitengrad gemittelten 2D-Fourier-Transformation berechnet. Muss der Wert meines resultierenden fft-Bildes einfach quadriert werden, um die Varianz zu erhalten?
Dies scheint eine sehr komplizierte Reihe von Fragen zu sein, aber jede Hilfe in irgendeinem Bereich wäre willkommen. Ich danke Ihnen.