-1
我想從C代碼訪問mpmath的特殊功能。 我知道如何通過中間的python腳本來完成它。 例如,爲了評價超幾何函數,C程序:直接從C調用mpmath
#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
有沒有辦法來調用mpmath功能hyp2f1直接來自C,而不必求助於中間的python腳本? 我猜測,mpmath模塊可以通過在命令
PyRun_SimpleString("from mpmath import *");
進口,但我怎麼訪問實際的功能?
如果您正在編寫C程序,爲什麼不使用C任意精度算術庫而不是Python? – user2357112
等一下。你編寫的代碼已經導入了一個Python模塊,訪問在該模塊中定義的函數,打包參數並調用函數。這意味着您已經知道完成工作所需的所有工具。你爲什麼不直接將這些工具應用到'mpmath'模塊而不是編寫一個包裝模塊? – user2357112
_你爲什麼不直接將這些工具應用到mpmath模塊而不是寫包裝模塊?_ – rgaelzer