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

nic*_*ris 6 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)
Run Code Online (Sandbox Code Playgroud)

我想显示经度平均的carbon_flux二维傅里叶变换的方差对数.我将数组平均在最后一个轴(经度)上,然后像这样进行傅立叶变换:

ft_type_1 = np.log(np.abs(np.fft.fft2(ma.mean(cflux, 2)))
Run Code Online (Sandbox Code Playgroud)

这给了我一个可以接受的结果.但是,有人告诉我先做平均值:

ft_type_2 = np.log(np.mean(np.abs(np.fft.fft2(carbon_flux, axes=(0, 1))),axis=2)
Run Code Online (Sandbox Code Playgroud)

这导致掩码值用于计算fft(我可以通过fft的第一个值来判断为10e19的数量级).

根据我的理解,在fft之前进行平均的结果将与fft之后的平均值不同.我在假设中是正确的,还是我执行这些功能的顺序没有区别?

fft是否使用屏蔽值?我可以避免这个吗?

最后,我计算了平均纬度以上的carbon_flux的二维傅里叶变换的对数.我无法理解如何计算纬度平均的2D傅里叶变换的VARIANCE的对数.我得到的fft图像的值是否需要平方才能成为方差?

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

aga*_*rs3 5

简单地查看文档后,我认为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)
Run Code Online (Sandbox Code Playgroud)

哪里cflux_fill_value有一些合理的猜测来替代掩码值。填充值也可以在另一个步骤中设置(它作为掩码数组的一部分存储),然后您可以在carbon_flux.filled()没有参数的情况下使用。