gpt4 book ai didi

Python/Numpy/Scipy - 将字符串转换为数学函数

转载 作者:太空狗 更新时间:2023-10-29 22:27:40 25 4
gpt4 key购买 nike

我处于一个有点不幸的位置,试图将程序从 CERN ROOT 的深处转换为 python。在 ROOT 代码中(CINT 本身就是一种可憎的 imo),可以将数学函数存储为“字符串”并将它们传递给 ROOT 以进行拟合、绘图等,因为 ROOT 将这些函数定义为“字符串”。

目前,数学函数作为一行存储在简单的文本文件中,即

(1+[1])^(1+[1])/TMath::Gamma(1+[1]) * x^[1]/[0]^(1+[1]) * exp(-(1+[1])*x/[0])

然后在读入文件时被 C++ 提取为字符串。 python中有类似的东西吗?我知道 numexpr,但我似乎无法让它与上面的等价物一起工作,即

(1+p[1])**(1+p[1])/scipy.special.Gamma(1+p[1]) * x**p[1]/p[0]**(1+p[1]) * numpy.exp(-(1+p[1])*x/p[0])

提前致谢。

最佳答案

假设您可以相信这些字符串是非恶意的,您可以构建一个字符串,该字符串定义一个计算表达式的函数,并使用 exec 将该字符串作为语句执行。例如,

import numpy as np
import scipy.special as special

expr='(1+p[1])**(1+p[1])/special.gamma(1+p[1]) * x**p[1]/p[0]**(1+p[1]) * np.exp(-(1+p[1])*x/p[0])'

def make_func(expr):
funcstr='''\
def f(x,p):
return {e}
'''.format(e=expr)
exec(funcstr)
return f

f=make_func(expr)
print(f(1,[2,3]))

返回

0.360894088631

关于Python/Numpy/Scipy - 将字符串转换为数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com