numpy Python:1d数组的快速汉克尔变换

rjee0c15  于 2023-05-07  发布在  Python
关注(0)|答案(4)|浏览(111)

我试图在Python中找到Hankel变换的任何现有实现(实际上,我更喜欢两个2d径向对称函数的对称傅立叶变换,但它可以很容易地简化为Hankel变换)。
我确实知道hankel python模块,但它需要lambda函数作为输入,而我只有1d-array。
有什么想法吗

ggazkfy8

ggazkfy81#

我是hankel的作者。虽然我不建议在这种情况下使用我的代码(因为正如你提到的,它需要一个可调用的输入函数,它的目的是准确地计算积分,而不是做DHT),但我会说这是可能的。
所有你需要做的就是插入你的输入1D数组。如何做到这一点取决于你,但通常情况下,像下面这样的操作效果很好:

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,使得变换对于kveck的所有值都很好地近似。如果kvec跨越很宽的动态范围,那么hankel的效率非常低,因为它在变换中为每个k使用相同的底层数组(长度为N),这意味着最困难的k设置了性能级别。
因此,再次强调,简而言之,我不推荐使用hankel,但如果您找不到其他任何东西,它仍然可以工作;- )

lpwwtiir

lpwwtiir2#

我的一个朋友正在寻找Python中的Hankel变换,在决定没有可用的东西之后-部分基于这个问题的答案-找到我分享我的。
我现在已经整理、记录并发布了代码PyHankdocs)。
这个软件包执行准离散汉克尔变换,如原始问题所要求的(如果几年太晚了!)但希望这个答案能把未来发现这个问题的用户(比如我的朋友)引导到正确的地方。

vsaztqbk

vsaztqbk3#

如果您阅读Hankel的文档,通过Transforms一节,您将看到要执行转换,您调用hankel.transform(function, array, ret_err=bool),因此您只需要执行所需转换形式的函数。我相信在Wikipedia条目中有Hankel Transformation的转换函数列表。

gblwokeq

gblwokeq4#

截至2023年,离散汉克尔变换有了很好的实现。
https://docs.scipy.org/doc/scipy/reference/generated/scipy.fft.fht.html
我也对计算径向对称函数的二维傅里叶逆很感兴趣。我不确定当我试图在2D网格上采样并直接计算2D傅立叶逆时,或者如果我计算汉克尔变换并在对数间隔网格上插值时,采样误差是否更糟。

相关问题