我想从C代码访问mpmath的特殊功能。 我知道如何通过中间python脚本来做到这一点。 例如,为了评估超几何函数,C程序:
#include <Python.h>
void main (int argc, char *argv[])
{
int npars= 4;
double a1, a2, b1, x, res;
PyObject *pName, *pModule, *pFunc, *pArgs, *pValue;
PyObject *pa1, *pa2, *pb1, *px;
a1= atof(argv[1]);
a2= atof(argv[2]);
b1= atof(argv[3]);
x= atof(argv[4]);
setenv("PYTHONPATH", ".", 1); // Set PYTHONPATH TO bin directory
Py_Initialize();
pa1= PyFloat_FromDouble(a1);
pa2= PyFloat_FromDouble(a2);
pb1= PyFloat_FromDouble(b1);
px= PyFloat_FromDouble(x);
pName = PyString_FromString("GGauss_2F1");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, "Gauss_2F1");
pArgs = PyTuple_Pack(npars, pa1, pa2, pb1, px);
pValue = PyObject_CallObject(pFunc, pArgs);
res= PyFloat_AsDouble(pValue);
printf("2F1(x)= %.15f\n", res);
}
通过调用GGauss_2F1.py脚本可以正常工作:
from mpmath import *
def Gauss_2F1(a1, a2, b1, z):
hpg= hyp2f1(a1, a2, b1, z)
return hpg
有没有办法直接从C调用mpmath函数hyp2f1,而不必求助于中间的python脚本? 我猜可以通过命令
导入mpmath模块PyRun_SimpleString("from mpmath import *");
但是如何访问实际功能呢?
答案 0 :(得分:0)
什么?没有!从字面上做你要做的事情 GGauss_2F1.Gauss_2F1,名称已更改。你为什么要尝试 到PyRun_SimpleString(&#34;来自mpmath import *&#34;)? - user2357112
确定。按照你的建议:
#include <Python.h>
void main (int argc, char *argv[])
{
int npars= 4;
double a1, a2, b1, x, res;
PyObject *pName, *pModule, *pFunc, *pArgs, *pValue;
PyObject *pa1, *pa2, *pb1, *px;
a1= atof(argv[1]);
a2= atof(argv[2]);
b1= atof(argv[3]);
x= atof(argv[4]);
setenv("PYTHONPATH", ".", 1); // Set PYTHONPATH TO bin directory
Py_Initialize();
pa1= PyFloat_FromDouble(a1);
pa2= PyFloat_FromDouble(a2);
pb1= PyFloat_FromDouble(b1);
px= PyFloat_FromDouble(x);
pName = PyString_FromString("mpmath");
pModule = PyImport_Import(pName);
pFunc = PyObject_GetAttrString(pModule, "hyp2f1");
pArgs = PyTuple_Pack(npars, pa1, pa2, pb1, px);
pValue = PyObject_CallObject(pFunc, pArgs);
res= PyFloat_AsDouble(pValue);
printf("2F1(x)= %.15f\n", res);
}
代码似乎按预期工作,并产生正确的结果。 感谢您的耐心&#34; ...