首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pybind11:在C++函数中返回大型数组会显著增加python中的计算时间

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

Stack Overflow用户
提问于 2020-08-21 18:12:15
回答 1查看 357关注 0票数 1

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

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

代码语言:javascript
复制
#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;
EN

回答 1

Stack Overflow用户

发布于 2020-08-21 18:22:11

它正在构造一个Python的浮点数列表,这有很多开销。我建议在Python端使用NumPy数组,如下所示:returning numpy arrays via pybind11

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63520877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档