Pybind11:在C++函数中返回一个大数组会显著增加python中的计算时间



我写了一个小C++脚本,并使用pybind11使C++函数在python中可用。当从python调用时,C++函数大约需要4秒才能终止。C++函数返回一个长度为54.346.383的大数组。出于好奇,我修改了C++函数,并返回了一个长度为7373的不同数组,而没有更改代码中的任何其他内容。现在,C++函数将在1秒内终止。所以据我所知,随着对象大小的增加,将对象从C++转移到Python将成为一个巨大的瓶颈。

有没有更聪明的方法来处理这个问题?也许用指针工作?(我对C++和pybind11完全陌生(

#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
#include <pybind11/stl.h>
#include <vector>
#include <numeric>
namespace py = pybind11;
std::vector<double> isoCdf_seq(std::vector<double> array_w, std::vector<double> W, std::vector<double>  Y, std::vector<int>  posY, std::vector<double>  array_y) {
std::vector<double> CDF;
CDF.reserve(m * mY);
// some code
return CDF;

它正在构建一个具有大量开销的Python浮点数列表。我建议在Python端使用NumPy数组,如下所述:通过pybind11返回NumPy数组

这样,您可以分配一次数组内存,Python可以将其作为NumPy数组引用,而无需分配5400万个小对象和对它们的引用。

最新更新