首页 > 解决方案 > 将数组分配给更高维数组

问题描述

这与高维 Xtensor 数组中的分配非常相似/相关。

我或多或少有同样的问题,想知道是否有更好的方法可以做?最后,标记为正确的答案最终仍然需要按元素分配,并且并没有真正提供一次将整个数组分配给给定轴的选项。

例如,在 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})

如果我有一个一维数组,这允许我一次分配整个数组。在高维结构中沿给定轴分配数组是否有任何等价物?

标签: c++arraysxtensor

解决方案


您可以使用视图来实现您想要的:

xt::xarray<double> x = xt::zeros<double>({2,2});
xt::view(x, 0) = xt::ones<double>({2});

有关详细信息,请参阅视图的文档


推荐阅读