C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
Multi-dimensional datasets in C++: cleanest approach to go from a std::vector of 2D data, to a 2D grid of std::vectors?
上下文:我一直在处理科学卫星图像,目前将每个时间戳的单个最终结果保留为cv::Mat_<double>
,例如可以存储在图像的 std::容器中,例如std::vector<cv::Mat_<double>>
。
问题:我现在想研究每个像素随时间推移的物理特性。为此,如果我能沿时间维度查看数据并使用 2D 矢量表,那将是可取的。换句话说:将一个std::vector<double>
关联到所有图像通用的 2D 网格上的每个像素。
其中一个原因是计算类型(计算百分位数、曲线拟合等(将依赖于期望提供std::vectors
等的std::algorithms
和库。对于给定的像素,数据在时间维度上的内存中绝对不是连续的。
在这种情况下,我真的可以/应该避免复制数据吗?如果是,那么最好的方法是什么?最好的我的意思是高效但尽可能"干净"/"清晰"。
我想到了std::reference_wrapper
将地址存储在std::vector
中;它简单且有效,但每个条目占用的内存与我简单地在std::vector<double>
中复制数据一样多。毕竟,每个数据点都只是双倍。
铌: 我偶然发现了Boost MultiArray,但我想避免添加Boost依赖项。
提前感谢您的时间/投入。
你可以尝试类似std::views::transform
的东西(或者它是前身,范围v3和增强范围适配器(,使用函数对象来查找每个像素
[x, y](cv::Mat_<double> & mat) -> double & { return mat[y][x]; }
但是,您绝对应该分析这是否值得与复制,因为我希望缓存位置很糟糕。
相关文章:
- C++中的多维数据集:从 std::vector 的 2D 数据到 std::vector 的 2D 网格的最干净方法?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 如何将 std::find() 与 2d std: 数组一起使用?
- 在 2D 整数矢量上使用 std::fill
- 使用 std::transform 在 2d C 阵列上转换为 1d C 数组
- 通过 std::sort 对 C 2D 数组进行排序
- 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?
- 在指向 2D 数据的指针上C++"std::sort"而不复制
- 将 2D 数组插入 std::vector 时"cannot convert from 'const GLfloat [12]' to '_Objty'"错误消息
- 如何有效地用枚举填充 2D std::数组
- 如何在多个文件中声明全局 std::vector 2d 数组?C++
- 我们如何在 c++ 中使用 std::sort 对 2D 字符串数组进行排序
- 将 std::set 分配给 2D std::vector of ints
- 此方法是否不适合在 std::unordered_map 中使用 2D 坐标作为键
- 如何在 C++ 中使用 std::insert in 2D map
- 使用多个std ::数组初始化2D std ::数组
- C++,2D std::vector,我是否需要显式保留和推送空矢量
- 打印2D std ::字符串数组
- 2d 数组运行时错误 "std::bad_alloc()" what()