【发布时间】:2023-02-10 02:45:05
【问题描述】:
我正在从事与引力透镜有关的项目,为此我需要评估长度为 ~ 10^8 个复点的数组 z 的合流超几何函数 1F1(a,b,z),a = 1+0.48j 和 b = 1。我正在寻找一种有效的方法来评估大数组大小。 scipy implementation 速度很快,但不接受 a 和 b 的复杂参数。
数学似乎是为复杂参数计算 1F1 的最佳方法,但 mpmath.hyp1f1 不接受数组值。我找到的最佳解决方法是使用 np.vectorize 或 np.frompyfunc 以允许将 NumPy 数组作为参数传递。但是,这非常慢并且需要数天才能执行(即使安装了 gmpy2)。我假设这是因为 mpmath 函数在大数组大小上总是很慢。
非 python 实现也可以,只要我能以某种方式将结果保存在磁盘上并将其读入我的 python 代码。我见过一些可能有效的实现(例如https://www.math.ucla.edu/~mason/research/pearson_final.pdf),但我不确定。
另一种可能的方法是插入函数 (我的输入数组中的连续点非常接近)但我不确定最好的方法是什么。
谢谢!
【问题讨论】:
-
幼稚的问题,但是您能否将“SciPy 实现”分解为实部和虚部并将其作为
a+ib形式的函数进行评估?这样输入都是实数,而输出可以重新组合成一个复数数组。 -
10^8 复数点的最大幅度是多少?
标签: python arrays scipy mpmath