我试图使用Python C API在C中调用Python函数。我使用PyObject_Call
来调用Python函数,它返回一个PyObject。如果返回的PyObject是一个numpy数组或列表,那么我应该如何处理它?基本上如果我想将它转换为C数组,或者只是将指针输出,我应该怎么做?
以下是代码的概要。 func
为numpy.power
。
double Array[4] = {1.0, 2.0, 3.0, 4.0};
int Integer = 2;
double *call_func(PyObject *func, double array[], int integer){
PyObject *args;
PyObject *kwargs;
PyObject *result;
npy_intp dims[1] = {4};
double *retval;
PyGILState_STATE state = PyGILState_Ensure();
args = Py_BuildValue("(Od)", PyArray_SimpleNewFromData(1, dims, NPY_DOUBLE, Array), integer);
kwargs = NULL;
result = PyObject_Call(func, args, kwargs);
Py_DECREF(args);
Py_XDECREF(kwargs);
retval = ???
Py_DECREF(result);
PyGILState_Release(state);
return retval;
}
...
答案 0 :(得分:0)
如果对象是Numpy数组,那么我认为this会对你有帮助。但你应该注意到这个问题:
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
DropDownList ddl = new DropDownList();
string connectionString = ConfigurationManager.ConnectionStrings["*******"].ConnectionString;
using (SqlConnection con = new SqlConnection(connectionString))
{
string query = "SELECT one, two, three FROM table WHERE id = " + TextBox1.Text;
SqlDataAdapter sda = new SqlDataAdapter(query, con);
DataSet ds = new DataSet();
int num = sda.Fill(ds);
if (num > 0)
{
GridView1.Visible = true;
GridView1.DataSource = ds;
GridView1.DataBind();
}
else
{
if (num == 0)
{
GridView1.Visible = false;
}
else
{
BindGrid();
}
}
}
它可以帮助你操作numpy数组。
如果它是一个列表,那么您将需要this link中的函数来操纵您的对象。
您将设法获取指向该项目的指针并将其转换回C对象。