Xtensor将numpy数组传递到XT :: XTENSOR参数类型
xtensor pass numpy array to function with xt::xtensor argument type
我正在与Xtensor一起玩,以便可以从Python中使用它。但是,Xtensor的吸引力之一是也很容易为R制作绑定,因此请写算法一次,然后为python编写绑定和r绑定,然后完成。
我已经从Python开始,当我将参数类型设置为XT :: Pyarray时,我已经获得了正确运行的代码。
void func(const xt::pyarray<float> x) { ... }
...
m.def("func", &func);
但是,我怀疑XT :: PyArray如果我尝试制作r绑定是不合适的。另外,XT :: Pyarray可能是XT :: Xarray类型。我记得在某个地方阅读XT :: Xtensor可以更好地优化,因为事先已知尺寸的数量。因此XT :: XtenSor要走的路。
void func(const xt::xtensor<float, 2> x) { ... }
...
m.def("func", &func);
所以我做了这种更改,而且很棒 - 它仍然有效。但是现在,我不知道该如何从numpy打电话。如果我以前使用NP.NDarrays来称呼它,这将不再有效,并告诉我类型不匹配。我还尝试使用np.asmatrix(x, dtype=np.float32)
转换NP.NDarrays,但这也不起作用。
为了使此工作我应该如何调用此功能?
xtensor-python
等效的 xtensor
是 pytensor
,就像 pyarray
是 xtensor-pyrhon
等效的 xarray
一样。请注意,即使xtensor
和pytensor
是不同类型的类型,即使它们接受相同的模板参数。pytensor
可以分配一个numpy数组,而xtensor
不能(对于xarray
和pyarray
代表相同的代表(。
还有关调用您的代码r,正确的能力, pyarray
和 pytensor
不是适当的类型。解决此问题的一种方法是将您的实现放置在接受任何类型的表达式的通用功能中,然后为每种语言建立界面,TAHT接受适当的类型并转发到实现。
您可以找到有关Xtensor文档中其他语言的C 代码绑定的更多详细信息,或在此Blog -post