如何在3D numpy蒙板阵列上管理2D傅里叶变换(FFT)?

时间:2011-11-08 15:21:21

标签: python math numpy fft

我在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图像的值是否需要平方才能成为方差?

这似乎是一系列非常复杂的问题,但任何部门的任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 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()而无需参数。