gpt4 book ai didi

python - xtensor 将 numpy 数组传递给具有 xt::xtensor 参数类型的函数

转载 作者:行者123 更新时间:2023-11-30 04:47:34 39 4
gpt4 key购买 nike

我正在尝试使用 xtensor,这样我就可以从 Python 中使用它。然而,xtensor 的吸引力之一是它也很容易为 R 进行绑定(bind),因此编写一次算法,然后为 python 和 R 编写绑定(bind),就完成了。

我从 python 开始,当我将参数类型设置为 xt::pyarray 时,我的代码可以正常运行。

void func(const xt::pyarray<float> x) { ... }
...
m.def("func", &func);

但是,我怀疑如果我尝试进行 R 绑定(bind),xt::pyarray 将不合适。此外, 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,但这也不起作用。

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

最佳答案

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

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

您可以在 xtensor documentation 中找到有关将 C++ 代码编写为其他语言的绑定(bind)的更多详细信息或在 this blogpost

关于python - xtensor 将 numpy 数组传递给具有 xt::xtensor 参数类型的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184103/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com