用pybind11铸造2D阵列
Casting 2D array with Pybind11
我正在为我的标头/lib文件创建python绑定,但是将2D数组作为参数的pybind11 by fare taund bander/lib files创建。我如何正确转换此参数?
标题文件将此功能称为
class __declspec(dllimport) SomeClass {
public:
void function(uint32_t arg1, uint32_t arg2, float matrix[3][3]);
我像
一样绑定它py::class_<SomeClass>(m, "_SomeClass", "SomeClass")
.def("function", &SomeClass::function,
py::arg("arg1"), py::arg("arg2"), py::arg("matrix"))
python setup.py bdist_wheel
输出以下内容(评论function
绑定构建轮子罚款(
C:Usersjoonagitsomeprojectpybind11includepybind11cast.h(1931,1): error C2664: 'Return pybind11::cpp_function::{ctor}::<lambda_b1f1895366c1273186f52810f5be9d13>::operator ()(Class *,uint32_t ,uint32_t ,float (*)[3]) const': cannot convert argument 4 from 'float *' to 'float (*)[3]' [C:Usersjoonagitsomeprojectbuildtemp.win-amd64-3.7Releasesomeproject.vcxproj]
我会选择std::array
:
class __declspec(dllimport) SomeClass {
public:
void function(uint32_t arg1, uint32_t arg2,
std::array<std::array<float,3>,3> matrix);
...
};
pybind将知道如何将其转换为2D列表。另外,在您的CPP代码内,访问与float[3][3]
相同。
编辑:
按照您的评论,我认为您可以使用类似的内容(请参阅Pybind文档(:
py::class_<SomeClass>(m, "SomeClass")
.def("function", [](SomeClass& sc, uint32_t arg1, uint32_t arg2,
std::array<std::array<float,3>,3> m)
{
float M[3][3] = {{m[0][0], m[0][1], m[0][2]},
{m[1][0], m[1][1], m[1][2]},
{m[2][0], m[2][1], m[2][2]}};
return sc.function(arg1, arg2, M);
});
在这里,我假设矩阵只是该函数的输入。您可以将结果复制到STD数组,如果也已输出。
相关文章:
- C++动态安全 2D 交错阵列
- 库特<<恩德尔;不适用于打印 2D 阵列
- 具有可变尺寸的 C++ 2D 阵列
- 如何通过Boost.MPI发送2d Boost.MultiArray的子阵列?
- 如何从2d Boost.MultiArray获取子阵列?
- 基于用户输入的 2D 动态阵列
- 2D 动态阵列被视为特洛伊木马?
- 如何遍历 2D 阵列?
- 超级对撞机2D阵列:生成嵌套:包装/尺寸问题
- 动态 2D 阵列.为什么分段错误?
- 尝试使用2D阵列
- 分配给阵列时出现分段错误?黑客排名 2D 阵列 - DS.
- 如何将1D阵列访问为2D阵列
- 分配/访问2d阵列,使得2d子块是连续的
- 重新分配2D阵列并删除旧阵列
- 不使用新的动态2D阵列
- 我正在为2D阵列参数而挣扎
- 特征和巨大的密集 2D 阵列
- 全球字符阵列(2D)
- 如何将内存映像分配给DLIB阵列2d或映像