Python:一维数组的快速汉克尔变换

标签 python numpy transform fft

我试图在 Python 中找到汉克尔变换的任何现有实现(实际上我更喜欢两个二维径向对称函数的对称傅里叶变换,但它可以很容易地简化为汉克尔变换)。

我确实知道 hankel python 模块,但它需要 lambda 函数作为输入,而我只有一维数组。

有什么想法吗?

最佳答案

我是 hankel 的作者.虽然我不建议在这种情况下使用我的代码(因为正如你提到的,它需要一个可调用的输入函数,并且它的目的是准确计算积分,而不是做 DHT),我会说它 可能。

您需要做的就是对输入的一维数组进行插值。如何做到这一点取决于您,但通常像下面这样的东西效果很好:

from scipy.interpolate import InterpolatedUnivariateSpline as Spline
import numpy as np

x, y = # Import/create data vectors

# Do this if y is both negative and positive
fnc = Spline(x,y, k=1) #I usually choose k=1 in case anything gets extrapolated.

# Otherwise do this
spl = Spline(np.log(x), np.log(y), k=1)
fnc = lambda x : np.exp(spl(np.log(x)))

# Continue as normal with hankel.transform(fnc, kvec)

这样做的一个大问题是选择参数 Nh 使得转换对于 k 的所有值都非常近似在 kvec 中。如果 kvec 跨越宽动态范围,则 hankel 效率非常低,因为它对每个 使用相同的底层数组(长度为 N) >k 在转换中,意味着最困难的 k 设置性能级别。

所以,简而言之,我不会推荐 hankel,但如果您找不到其他任何东西,它仍然可以工作;-)

关于Python:一维数组的快速汉克尔变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43259276/

相关文章:

python - 将图像渲染为定义的像素方 block HTML5 Canvas ?

python - 直方图中的 Matplotlib 2.0 条纹

xml - 使用 XSL 转换表修改 XML 中的命名空间

python - 在 Pandas DataFrame 中选择包含至少一个 True 值的列的最佳解决方案

python - 检查列中的值是否是另一个数组的超集

python - 自动补零数组

c# - 为什么 Unity 在某些函数(例如 GetChild())中使用变换而不是游戏对象?

css - Chrome : why does css 3d transform on large elements with transform scale < 0 cause white screen bug?

python - Numpy 逐元素点积

python - numpy 数组上的高效行操作