我编写了一个C++脚本,使用pybDun11来实现Python中的C++函数。当从Python调用时,C++函数需要大约4秒才能终止。C++函数返回长度为54.34×38的大数组。 出于好奇,我修改了C++函数,并返回了一个长度为7373的不同数组,而不改变代码中的任何其他内容。现在C++函数以1秒结束。因此,当我理解到,对象从C++到Python的传输成为一个巨大的瓶颈,因为对象的大小增加了。p>
有没有更聪明的方法来处理这个问题?也许和指针一起工作?(我对C++和PybDin 11完全陌生)
#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数组,这里对此进行了解释:returning numpy arrays via pybind11
这样,您可以一次性分配数组内存,Python可以将其作为NumPy数组引用,而无需分配5400万个微小对象和对它们的引用
相关问题 更多 >
编程相关推荐