首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Vigra和registerConverters()的Boost-python

带有Vigra和registerConverters()的Boost-python
EN

Stack Overflow用户
提问于 2014-07-09 19:16:27
回答 2查看 80关注 0票数 0

有人知道使用registerConverters的意义吗?请参阅下面的代码。

代码语言:javascript
复制
NumpyAnyArray test(NumpyArray<2, double > A, NumpyArray<2, double > B)
{
    MultiArrayShape<2>::type volumeShape(A.shape()[0], A.shape()[1]);
    B.reshape(volumeShape);
    B=A;
    B*=5;
    B(0,0)=1;
    B(1,1)=9;
    std::cerr<<A.shape()<<" "<<A.shape()[0]<<" "<<A.shape()[1]<<"\n";
    B(A.shape()[0]-1,0)=2;
    B(0,A.shape()[1]-1)=3;
    return B;
}
// Expose classes and methods to Python
BOOST_PYTHON_MODULE(cppinterface) {
    using namespace boost::python;
    using namespace vigra;
    import_vigranumpy();

    def("test", registerConverters(&test),(arg("A"), arg("B") = object())  );
}
EN

回答 2

Stack Overflow用户

发布于 2014-07-22 00:42:41

基于Vigra implementationvigra::registerConverters()是一个方便的函数,用于注册vigra::NumpyArrayvigra::MultiArrayView类型到NumPy的PyArrayObject类型的to-Python和from-Python转换器。

在提供C++和Python之间的无缝互操作性时,人们经常发现需要注册自动类型转换器。在这种情况下,registerConverters()会注册从Vigra数组到NumPy数组的转换器,而不需要用户使用Vigra数组。在Boost.Python中,转换器注册操作的是类型,而不是模板。因此,必须为从Vigra模板数组实例化产生的每个类型注册转换器。通过使用元编程,registerConverters()通过将提供的函数签名分解到类型列表中,然后迭代该列表,有条件地注册NumpyArrayMultiArayView类型的转换器,从而减少了通常需要注册转换器的大量样板代码。

有关自动转换器的更多信息,请考虑阅读有关如何注册to-Python和from-Python转换器的Boost.Python FAQ示例。

票数 2
EN

Stack Overflow用户

发布于 2014-07-09 20:00:17

需要registerConverters才能正确转换c++类型,如int、short、char等。到numpy类型np.int32、np.int16、np.int8、..

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

https://stackoverflow.com/questions/24652247

复制
相关文章

相似问题

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