我正在尝试从C ++ 使用矩阵调用python脚本,以便获取Python函数绘制的矩阵。
主要问题是矩阵向python函数的传输。我几乎找不到例子,其中将嵌入函数作为值给出了整个矩阵。
我没有使用任何嵌入的经验,也没有使用python的经验,但是我一直对如何正确地执行它感兴趣,因此,如果发现任何编码错误,请随时纠正。
用于嵌入的代码是此处精简的代码示例形式:https://docs.python.org/release/2.6.5/extending/embedding.html#extending-embedded-python
尽管我不确定是否应该为python脚本创建标题和模块,还是足够了。
MatCal.cpp:
#include <Python.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
/*argv[1] = MatCal.py
argv[2] = plot*/
int main(int argc, char *argv[]) {
float a[100][100];
pyPlot(a[][], argc, *argv[])
return 0;
}
void pyPlot(float a[][]) {
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs,
int i;
if (argc < 3) {
fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
return 1;
}
Py_Initialize();
pName = PyString_FromString(argv[1]);
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, argv[2]);
if (!pFunc || !PyCallable_Check(pFunc)) {
PyErr_Print();
fprintf(stderr, "Failed to load funtion from module");
}
PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
else {
PyErr_Print();
fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
return 1;
}
Py_Finalize();
return 0;
}
MatCal.py:
import matplotlib as mpl
import numpy as np
import astropy as ap
def plot(a, len, wid)
a=ap.simple_sqrt(a)
plt.imshow(a, cmap='hsv')
return None
(建议我使用simple_sqrt来减小矩阵中值之间的距离并改善其可视化效果。)
我仍然不确定嵌入的内容,我们非常感谢您的帮助。另外:如果有人知道关于API,嵌入和或跨语言编程的好书/文章,那么我对该主题非常感兴趣。