我想将Python列表传递给采用C样式数组的构造函数。
那应该如何工作。问题在于C样式数组本质上是一个指针。此外,该阵列具有尺寸n×n,即它是多维阵列。
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;}));
}
在python方面,它应该类似于:
import matrix_class_bind as mcb
a = [[1,2,3], [3,4,5], [1,1,1]]
mcb.matrix_class(a)
最佳答案
如果您的目标是将矩阵作为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 &>());
}