【发布时间】:2012-10-17 07:25:18
【问题描述】:
我是 boost.python 的新手,并且制作了一个简单的函数,用于将列表从 python 传递到 C++ 向量:
void SetXValues(boost::python::list xl){
int n = len((xl));
xvals.resize(n);
for(unsigned int i=0; i<n; i++){
xvals[i] = boost::python::extract<double>((xl)[i]);
}
}
xvals 是一个 C++ STL 向量。这个函数有效,我可以将 python 列表加载到 C++ 中,但它似乎非常慢。
我做的一个小速度测试是用 C++ 和纯 Python 编写一个分箱算法。结果表明,当包含从 Python 传递数据的时间时,C++ 方法的速度仅快 5 倍,但当然单独的分箱算法要快得多(74 倍)。
那么有没有什么办法可以改进上面的功能,让它更有效率呢?
【问题讨论】:
-
为什么不
std::copy(boost::python::stl_input_iterator<double>(xl), boost::python::stl_input_iterator<double>(), xvals.begin());? -
太棒了!这将数据输入到 C++ 的时间减少了一半以上。我必须承认,虽然我不太明白这意味着什么,但我想我会去查找 boost.python 迭代器文档。
-
谁能解释为什么@ForEveR 的解决方案可以加快 OP 的代码速度?
-
@fireboot 我想这是因为
std::copy一次复制了一大块线性内存,而通过向量迭代复制每个元素的成本更高。
标签: c++ python performance list boost-python