簡體   English   中英

如何在3D numpy蒙板陣列上管理2D傅里葉變換(FFT)?

[英]How to manage a 2D Fourier Transform(FFT) on a 3D numpy masked array?

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

這似乎是一系列非常復雜的問題,但任何部門的任何幫助都會受到贊賞。 謝謝。

簡要地查看文檔后,我認為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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM