【发布时间】:2011-12-24 13:28:05
【问题描述】:
我在对 3D 数组执行 2D 快速傅立叶变换时遇到问题。它们具有数学性质和“理解 python/numpy”性质。
编辑:为了澄清,核心问题是: numpy.fft 如何处理掩码数组? 我可以在一个轴上进行平均然后执行 fft 并获得与执行 fft 然后对 fft 未涉及的轴进行平均的相同结果吗?
该数组由每个纬度和经度(在某个域中)的大气和海洋之间的二氧化碳通量值(以“单位”为单位)组成。数组的形状是 (730, 50, 182) 对应(时间,纬度,经度)。土地价值被掩盖使用:
import numpy as np
from numpy import ma
carbon_flux = ma.masked_values(carbon_flux, 1e+20)
我想显示 carbon_flux 的 2D 傅里叶变换在经度上平均的方差的对数。我在最后一个轴(经度)上平均数组,然后像这样进行傅里叶变换:
ft_type_1 = np.log(np.abs(np.fft.fft2(ma.mean(cflux, 2)))
这给了我一个可以接受的外观结果。但是,我被告知要先进行平均:
ft_type_2 = np.log(np.mean(np.abs(np.fft.fft2(carbon_flux, axes=(0, 1))),axis=2)
这导致使用掩码值来计算 fft(我可以通过 fft 的第一个值来判断为 10e19 的数量级)。
据我了解,在 fft 之前进行平均的结果与在 fft 之后进行平均的结果不同。我的假设是正确的,还是我执行这些功能的顺序没有区别?
fft 是否使用掩码值?我可以避免这种情况吗?
最后,我计算了 carbon_flux 在纬度上平均的二维傅里叶变换的对数。我不明白如何计算以纬度平均的二维傅里叶变换方差的对数。我得到的 fft 图像的值是否只需平方即可成为方差?
这似乎是一系列非常复杂的问题,但任何部门的任何帮助都将不胜感激。谢谢。
【问题讨论】:
-
首先,我不知道 numpy.fft 如何处理这些。但是,FT 是线性运算,所以只要在取绝对值之前对数据进行平均,它应该不会真正产生影响。
-
@aganders3 谢谢。是的,这在实践中似乎是正确的。结果得到的两个数字几乎完全相同。我想知道这些细微差别从何而来?