“隐式”统一数据的 FFT

计算科学 Python 稀疏矩阵 傅里叶变换
2021-12-09 03:13:56

我正在尝试对从模拟星系调查目录估计的密度场进行傅里叶变换。

基本上,你从一个星系位置列表开始,然后你将这些位置放在一些网格间距上,得到一个数组,其中包含相关空间体积中每个网格位置的权重。

因为我试图保留有关小空间尺度的信息,所以我想避免使用大箱子。不幸的是,这使得密度场的完整数组表示在内存上非常昂贵,因为有大量的空箱对于大多数目的来说是无关紧要的。

到目前为止,我一直在没有数组表示的情况下进行分箱,而是将数据保存在具有各自权重的坐标列表中。

但是,我的理解是,这不足以执行标准的 FFT 例程。我需要均匀分布的数据,我在这个表示中没有。

一个自然的选择可能是类似pynufft(因为我主要使用 Python)或nfft

但是,我的情况似乎与标准的非均匀 FFT 有所不同;我不是在处理“非均匀采样”本身,而是我的采样是完全均匀的,但太大而无法存储显式零。

是否有任何 FFT 实现允许我不创建一个显式的零数组,或者至少利用我隐含地知道我的数据的稀疏表示中的“缺失”箱是零值的事实?

1个回答

由于您的直方图非常稀疏,因此您的密度场大约是加权 delta 函数的总和:

ρ(r)=j=1Nbinswjδ(rrj)
在哪里rj是每个 bin 的中心,并且wj是重量。那么它的傅里叶变换就是
ρ^(k)=exp(ikr)ρ(r)d3r=j=1Nbinswjexp(ikrj)
或者,您可以跳过分箱过程,将每个星系视为在其自己的“箱”中,重量等于 1。原则上,这使您可以访问任意高k信息(而不是受限于 bin 的物理宽度),但它会比 binned 密度更嘈杂。