我在3D阵列上进行2D快速傅里叶变换时遇到问题。它们具有数学性质,具有“理解蟒蛇/笨拙”的本质。
编辑:为澄清,核心问题是: 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二维傅里叶变换的方差对数。我将数组平均在最后一个轴(经度)上,然后像这样进行傅立叶变换:
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的二维傅里叶变换的对数。我无法理解如何计算纬度平均的2D傅立叶变换的VARIANCE的对数。我得到的fft图像的值是否需要平方才能成为方差?
这似乎是一系列非常复杂的问题,但任何部门的任何帮助都会受到赞赏。谢谢。
答案 0 :(得分:4)
简要地查看文档后,我认为numpy.fft
可能会忽略掩码。我会尝试使用ma.filled()
函数在所有被屏蔽的条目中添加其他值。
这样的东西(取自你的示例代码):
ft_type_1 = np.log(np.abs(np.fft.fft2(ma.mean(carbon_flux.filled(cflux_fill_value), 2)))
ft_type_2 = np.log(np.mean(np.abs(np.fft.fft2(carbon_flux.filled(cflux_fill_value), axes=(0, 1))),axis=2)
其中cflux_fill_value
是一个合理的猜测来替代蒙版值。填充值也可以在另一个步骤中设置(它作为掩码数组的一部分存储),然后您可以使用carbon_flux.filled()
而无需参数。