我试图找到任何现有的Hankel变换在Python中的实现(实际上,我更多地进入两个2d径向对称函数的对称傅里叶变换,但它可以轻松地简化为hankel变换)。Python:用于1d阵列的快速汉克尔变换
我知道关于hankel
python模块,但它需要lambda函数输入,而我只有1d数组。
有什么想法?
我试图找到任何现有的Hankel变换在Python中的实现(实际上,我更多地进入两个2d径向对称函数的对称傅里叶变换,但它可以轻松地简化为hankel变换)。Python:用于1d阵列的快速汉克尔变换
我知道关于hankel
python模块,但它需要lambda函数输入,而我只有1d数组。
有什么想法?
我是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)
本大题有这样做是在选择参数N
和h
使得变换以及近似的所有值k
于kvec
。如果kvec
跨越很宽的动态范围,那么hankel
效率非常低,因为它在变换中为每个k
使用相同的基础阵列(长度为N
),这意味着最困难的k
会设置性能级别。
如此反复,总之我不会推荐hankel
,但如果你不能找到任何东西,它仍然会工作;-)
如果你读了Hankel文档通过变换节中的所有方式,你会看到执行调用hankel.transform(function, array, ret_err=bool)
改造,所以你只需要为你需要转换的任何形式的功能。我相信在维基百科条目Hankel Transformation中有一个转换函数列表。
我应该更清楚地说明:我已经阅读过文档,并且要求__callable__函数在'hankel.transform'中输入,但我有1d-array而不是 –
你是说你的函数表示为1d阵列。我的印象是你需要''hankel.tranform'方法的可调用和数组。 – Grr
我需要的是'hankel.transform(array,array,ret_err)' –
的GNU科学图书馆(GSL)包括用于计算离散[功能Hankel转换](https://www.gnu.org/software/gsl/manual/html_node/Discrete-Hankel-Transforms.html#Discrete-Hankel-Transforms)。 [PyGSL](http://pygsl.sourceforge.net/)提供了一个GSL的Python包装器。自从我尝试安装它以来已经有一段时间了,所以我不知道这将是多么具有挑战性。 –