pybind11:如何包装以 std::vector<double> 为参数以避免数据复制的 C++ 函数



c++ 函数:

double cpp_func(const std::vector<double>& x) {
return ...;
}

我想使用pybind11将此函数包装到 python,它接受 numpy 数组作为参数,x可能非常大,所以我想通过引用或指针传递 numpy 数组。

要传入的数组从哪里开始其生命周期?如果你可以控制它的创建,那么你可以把它变成一个std::vector,并对该向量的数据((进行numpy视图。这样,你可以同时使用两者:在C++-land中时为向量,在Python端使用numpy数组。

唯一需要注意的是,在 numpy 视图的生命周期内,矢量不应调整大小(或者您知道它有史以来的最大大小,并在创建后保留((该内存(。

如果矢量从不调整大小,则可以使矢量成为视图的数据成员以同步生命周期。

最新更新