我有一个python程序,它生成一个数学表达式
exp(sin(x-y))**2
现在我想把这个给我的C++程序,它必须用不同的x,y值来评估这个表达式。我的第一种方法是使用Python.h库和PyRun_字符串。在
这里是初始化代码:
^{pr2}$这里是经过多次求值的代码:
char execString[200];
memset(execString,0,strlen(execString));
sprintf(execString,"result=func(%f,%f)",x1[0], x2[0]);
PyObject* main = PyImport_AddModule("__main__");
PyObject* globalDictionary = PyModule_GetDict(main);
PyObject* localDictionary = PyDict_New();
//create the dictionaries as shown above
PyRun_String(execString, Py_file_input, globalDictionary, localDictionary);
double result = PyFloat_AsDouble(PyDict_GetItemString(localDictionary, "result"));
但是,我觉得每次都用PyRun_字符串解析字符串太慢了。有没有一种方法可以直接将Python表达式转换成C++函数,可以有效地调用它?或者还有其他选择吗?使用symbolicc++
我建议将所有的输入作为数组/向量传递给c++&一次解决所有问题。另外,请尝试
Py_CompileString
&;PyEval_EvalCode
,而不是PyRun_String
。我不得不解数百万个方程,发现速度提高了10倍。在下面是一个简单的
'a + b'
的例子,但是通过更多的for循环,我们可以将其推广到具有任意数量变量的任何方程中。对于一百万个值,下面的值在我的机器上只需不到一秒钟就可以完成(相比之下,PyRun_String
则为10秒)。在相关问题 更多 >
编程相关推荐