这与Assigning in high-dimensional Xtensor arrays非常相似。
我或多或少都遇到相同的问题,想知道是否有什么可以做得更好的?最后,标记为正确的答案最后仍然需要按元素分配,并且实际上并没有给出一次将整个数组分配给给定轴的选项。
作为示例,在numpy-python中,我可以按照以下方式进行操作
x = np.zeros((2,2))
x[0] = np.ones(2)
print(x)
运行后会返回
[[ 1. 1.]
[ 0. 0.]]
现在在xtensor中,我想做类似的事情,即沿特定轴分配整个数组。我尝试过的是
xt::xarray<double> x = xt::zeros<double>({2,2});
x(0) = xt::ones<double>({2});
但是这不起作用-本质上是与OP相同的问题。现在建议的解决方案是
xt::xarray<double> x = xt::zeros<double>({2,2});
for(int =0; i < 2;i++){
x(0,i) = 1;
}
这给出了正确的结果-但是,这仍然需要我在孔轴上循环,而不是直接将数组分配给整个对象。比较一下
xt::xarray<double> x;
x = xt::zeros<double>({2})
如果我有1D数组,则可以立即分配整个数组。在高维结构中沿给定轴分配数组有什么等效的方法?
答案 0 :(得分:0)
您可以使用视图来实现所需的目标:
xt::xarray<double> x = xt::zeros<double>({2,2});
xt::view(x, 0) = xt::ones<double>({2});
有关更多详细信息,请参见view's documentation