c ++如何在没有深度复制的情况下从xtensor中展平视图?

问题描述 投票:2回答:1

是否有可能直接展平xtensor的视图?就像是:

xt::xarray<double> arr3d = xt::linspace<double>(1.0, 21970.0, 21970);
arr3d.reshape({13, 13, 130});
xt::xtensor<double, 3> data = arr3d;

xt::xtensor<double, 3>  data_view = xt::view(data, xt::range(9, 12),xt::range(9, 12),xt::range(9, 12));
xt::xtensor<double, 1>  flat_data = xt::flatten(data_view);

如果我尝试直接展平视图,结果会有所不同。

xt::xtensor<double, 1>  flat_data = xt::flatten(xt::view(data, xt::range(9, 12),xt::range(9, 12),xt::range(9, 12)));

我正在考虑直接扁平化,以获得更干净和优化的代码。有办法吗?或者我应该在展平它之前将视图复制到辅助变量?

Obs。:扁平化直接输出(错误答案): 16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414, 16415,16416。

在展平前复制输出我需要的东西(内核窗口):16390,16391,16392,16520,16521,16522,16650,16651,16652,18080,18081,18082,18210,18211,18212,18340,18341,18342,19770 ,19771,19772,19900,19901,19990,20030,2003,20032

c++ 3d xtensor
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.