首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xtensor将numpy数组传递给参数类型为xt::xtensor的函数

xtensor将numpy数组传递给参数类型为xt::xtensor的函数
EN

Stack Overflow用户
提问于 2019-05-17 18:02:31
回答 1查看 492关注 0票数 1

我正在使用xtensor,这样我就可以在Python中使用它了。然而,xtensor的一个吸引人之处在于,它也很容易为R进行绑定,所以只需编写一次算法,然后为python编写绑定,为R编写绑定,就完成了。

我已经开始使用python,并且当我将参数类型设置为xt::pyarray时,我已经让我的代码正常运行。

代码语言:javascript
复制
void func(const xt::pyarray<float> x) { ... }
...
m.def("func", &func);

但是,我怀疑如果我尝试进行R绑定,xt::pyarray将不再合适。另外,xt::pyarray可能是xt::xarray类型。我记得在某处读到过xt::xtensor可以更好地优化,因为维度的数量是预先知道的。所以xt::xtensor是可行的方法。

代码语言:javascript
复制
void func(const xt::xtensor<float, 2> x) { ... }
...
m.def("func", &func);

所以我做了这个改变,而且很棒--它仍然有效。但现在,我不知道如何在numpy中调用它。如果我像以前那样使用np.ndarrays调用它,这将不再起作用,并通知我类型不匹配。我也尝试过用np.asmatrix(x, dtype=np.float32)转换np.ndarrays,但同样不起作用。

我应该如何从numpy调用此函数才能使其工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 20:41:34

xtensorxtensor-python等价物是pytensor,就像pyarrayxarrayxtensor-pyrhon等价物一样。请注意,xtensorpytensor是不同的类型,即使它们接受相同类型的模板参数。可以为pytensor分配一个numpy数组,而不能为xtensor分配一个numpy数组( xarraypyarray相同)。

另外,关于调用代码形式R的能力,你是对的,pyarraypytensor不是合适的类型。解决这个问题的一种方法是将你的实现放在泛型函数中,接受任何类型的表达式,然后为每种语言制作接口,接受适当的类型并转发给实现。

您可以在xtensor documentationthis blogpost中找到有关将C++代码绑定到其他语言的更多详细信息

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

https://stackoverflow.com/questions/56184103

复制
相关文章

相似问题

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