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

2024-06-09 21:54:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在尝试将一个程序从CERN根的深处转换成python时有点不幸。在根代码中(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,但我似乎不能让它与上面的等价物一起工作,即

^{pr2}$

提前谢谢你。在


Tags: 函数字符串代码程序绘图定义数学root
1条回答
网友
1楼 · 发布于 2024-06-09 21:54:22

假设您可以相信字符串是非恶意的,所以可以构建一个字符串,该字符串定义一个计算表达式的函数,并使用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]))

退货

^{pr2}$

相关问题 更多 >