有人知道使用registerConverters的意义吗?请参阅下面的代码。
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()) );
}发布于 2014-07-22 00:42:41
基于Vigra implementation,vigra::registerConverters()是一个方便的函数,用于注册vigra::NumpyArray和vigra::MultiArrayView类型到NumPy的PyArrayObject类型的to-Python和from-Python转换器。
在提供C++和Python之间的无缝互操作性时,人们经常发现需要注册自动类型转换器。在这种情况下,registerConverters()会注册从Vigra数组到NumPy数组的转换器,而不需要用户使用Vigra数组。在Boost.Python中,转换器注册操作的是类型,而不是模板。因此,必须为从Vigra模板数组实例化产生的每个类型注册转换器。通过使用元编程,registerConverters()通过将提供的函数签名分解到类型列表中,然后迭代该列表,有条件地注册NumpyArray和MultiArayView类型的转换器,从而减少了通常需要注册转换器的大量样板代码。
有关自动转换器的更多信息,请考虑阅读有关如何注册to-Python和from-Python转换器的Boost.Python FAQ示例。
发布于 2014-07-09 20:00:17
需要registerConverters才能正确转换c++类型,如int、short、char等。到numpy类型np.int32、np.int16、np.int8、..
https://stackoverflow.com/questions/24652247
复制相似问题