c++ 如何在不进行深度复制的情况下展平 xtensor 的 View ?

标签 c++ 3d xtensor

是否可以直接从 xtensor 展平 View ? 像这样的东西:

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);

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

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

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

观察: 展平直接输出(错误答案):
16390、16391、16392、16393、16394、16395、16396、16397、16398、16399、16400、16401、16402、16403、16404、16405、16406、1640 7、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、1834 2、19770、19771、19772、19900、19901、19902、20030、 20031、20032

最佳答案

这看起来像是一个错误,您可以在 xtensor's repo 上提出问题吗?请问?

您还可以在一行中初始化第一个张量并避免复制:

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

关于c++ 如何在不进行深度复制的情况下展平 xtensor 的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55229180/

相关文章:

c++ - C 中的信赖域反射算法库

c++ - CMake:用于发布版本的平台独立二进制剥离

opengl - 如何在 OpenGL 中通过 2D 屏幕鼠标单击大型对象获得准确的 3D 深度?

java - 如何检测另一个java线程是否被挂起或卡住?

c++ - C/C++ : Force Bit Field Order and Alignment

c++ - 我的虚函数的原型(prototype)应该是什么?

math - 检查平面上的点在哪一侧

c++ - 如何在 xt::filter 中使用相等性?

c++ - 如何使用指针用数据填充 xtensor 数组

android - Android Studio 中的 C++ 矩阵乘法