Pybind11:将Python列表传递给C风格的数组

时间:2018-03-15 13:52:50

标签: python c++ arrays pybind11

我想将Python列表传递给一个采用C风格数组的构造函数。 应该怎么做问题是C风格的数组本质上是一个指针。此外,阵列具有尺寸n×n,即它是多维阵列。

JS

在python方面它应该是这样的:

     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;}));
    }

1 个答案:

答案 0 :(得分:1)

如果您的目标是以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 &>());
}