我试图在 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)
这样做的一个大问题是选择参数 N
和 h
使得转换对于 k
的所有值都非常近似在 kvec
中。如果 kvec
跨越宽动态范围,则 hankel
效率非常低,因为它对每个 使用相同的底层数组(长度为
在转换中,意味着最困难的 N
) >kk
设置性能级别。
所以,简而言之,我不会推荐 hankel
,但如果您找不到其他任何东西,它仍然可以工作;-)
关于Python:一维数组的快速汉克尔变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43259276/