Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pybind11:将Python列表传递给C样式数组_Python_C++_Arrays_Pybind11 - Fatal编程技术网

Pybind11:将Python列表传递给C样式数组

Pybind11:将Python列表传递给C样式数组,python,c++,arrays,pybind11,Python,C++,Arrays,Pybind11,我想把一个Python列表传递给一个采用C风格数组的构造函数。 那该怎么办呢。问题在于C样式数组本质上是一个指针。此外,该数组具有维数nxn,即它是多维数组 PYBIND11_MODULE(matrix_class_bind, m){ py::class_<matrix_class<double>>(m, "matrix_class") .def(py::init([](double x[3][3]){ m

我想把一个Python列表传递给一个采用C风格数组的构造函数。 那该怎么办呢。问题在于C样式数组本质上是一个指针。此外,该数组具有维数nxn,即它是多维数组

     PYBIND11_MODULE(matrix_class_bind, m){
         py::class_<matrix_class<double>>(m, "matrix_class")
         .def(py::init([](double x[3][3]){
          matrix_class<double> new_class(x);
          return new_class;}));
    }

如果您的目标是以C数组的形式访问矩阵,则可以使用
py::list
,而不是将矩阵作为指针传递

class matrix_class {
    public:
        static const int n = 3;
        int carray[n][n];
        py::list list;
        matrix_class(const py::list &list) : list(list) {
            for (int i = 0; i < n; i++) {
                py::list l = list[i].cast<py::list>();
                for (int j = 0; j < n; j++){
                    int p = l[j].cast<int>();
                    carray[i][j] = p;
                }
            }
    }
}

PYBIND11_MODULE(matrix_class_bind, m) {
    py::class_<matrix_class>(m, "matrix_class")
        .def(py::init<const py::list &>());
}
类矩阵\u类{
公众:
静态常数int n=3;
国际卡拉伊[n][n];
py::列表;
矩阵类(const py::list&list):list(list){
对于(int i=0;i
退房。您需要编写一个接口函数,该函数采用
xt::pyarray
引用,并通过采用与vector/STL数组类似的第一个元素的地址来传递给您的C风格函数。您看过关于自定义构造函数的文档了吗。这将允许您编写一个包装器,将列表等转换为原始数组。
class matrix_class {
    public:
        static const int n = 3;
        int carray[n][n];
        py::list list;
        matrix_class(const py::list &list) : list(list) {
            for (int i = 0; i < n; i++) {
                py::list l = list[i].cast<py::list>();
                for (int j = 0; j < n; j++){
                    int p = l[j].cast<int>();
                    carray[i][j] = p;
                }
            }
    }
}

PYBIND11_MODULE(matrix_class_bind, m) {
    py::class_<matrix_class>(m, "matrix_class")
        .def(py::init<const py::list &>());
}