gpt4 book ai didi

python - 如何在 3D numpy 掩码数组上管理 2D 傅立叶变换 (FFT)?

转载 作者:太空狗 更新时间:2023-10-30 00:08:16 25 4
gpt4 key购买 nike

我在对 3D 阵列进行 2D 快速傅里叶变换时遇到问题。它们具有数学性质和“理解 python/numpy”的性质。

编辑:为澄清起见,核心问题是:numpy.fft 如何处理屏蔽数组?我可以在一个轴上取平均值然后执行 fft 并获得与执行 fft 然后在未参与 fft 的轴上取平均值相同的结果吗?

该数组包含大气和海洋之间每个纬度和经度(在特定域中)的二氧化碳通量值(以“单位”表示)。数组的shape是(730, 50, 182)对应的是(time, latitude, longitude)。土地值(value)被掩盖使用:

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 傅里叶变换方差的对数。我生成的 fft 图像的值是否只需要平方即可成为方差?

这似乎是一系列非常复杂的问题,但任何部门的任何帮助都将不胜感激。谢谢。

最佳答案

简单浏览了文档后,我认为 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() 而不带参数。

关于python - 如何在 3D numpy 掩码数组上管理 2D 傅立叶变换 (FFT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com