将 2D C++ 向量传递给 python 函数并将输出作为 2D 数组返回

问题描述

我已经坚持了一个星期了。我正在初始化一个双打的二维向量并将它传递给一个简单的 将其乘以 2 并返回的 python 函数

def in_arr_out_arr(arr_input):

    print(arr_input)
    arr_input2 = 2*arr_input

    return (arr_input2)

print 函数垃圾值打印到控制台。

这是调用函数

PyObject* call_python_function_vector2d_input(PyObject* function_name,vector<vector<double>> args)
{


    import_array()
    PyObject* np_arg = (PyObject*)vector_to_nparray(args);
    
    PyObject* pReturn,* pArgs;

    pArgs = PyTuple_New(1);
    PyTuple_SetItem(pArgs,np_arg);

    pReturn = PyObject_CallObject(function_name,pArgs);
    PyErr_PrintEx(0);
    //cout << pReturn << "\n";

    return pReturn;

}

static PyArrayObject* vector_to_nparray(vector< vector<double> >& vec,int type_num = PyArray_DOUBLE) {

size_t nRows = vec.size();
size_t nCols = vec[0].size();
npy_intp dims[2] = { nRows,nCols };
PyArrayObject* vec_array = (PyArrayObject*)PyArray_SimpleNew(2,dims,type_num);

double* vec_array_pointer = (double*)PyArray_DATA(vec_array);

for (size_t iRow = 0; iRow < vec.size(); ++iRow) 
{
    copy(vec[iRow].begin(),vec[iRow].end(),vec_array_pointer + iRow * nCols);
}

return vec_array;


}


这是我仅通过阅读本论坛上的一些先前答案而尝试的最后一个版本。 它可能与 np_arg 的连续内存分配块有关,但我没有 指针方面的很多专业知识

更新

删除了所有函数,并在主函数中简单地运行了整个事情。它起作用了。 有人可以告诉为什么不在函数形式中运行。另外,如何使用单独的函数运行它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)