c++ - 有没有办法在多维向量中切换维度顺序?
问题描述
我有一个 3D 矢量,我希望能够选择要绘制的维度作为另一个维度的函数。
到目前为止,我是手动完成的:我创建了第二个 3D 矢量并相应地重新组织数据。这个解决方案不是很实用,因为我每次想要切换维度时都需要切换索引(在嵌套循环内)......
有更好/更清洁的解决方案吗?
谢谢。
解决方案
C++ 不提供多维容器的原因与容器等std::vector
不提供标准operator+
等的原因相同:没有适合每个人需求的标准(在+
运算符的情况下,这可能是连接、元素相加、增加维度, 谁知道)。如果你上课而不是矢量
<template typename T>
class volume {
private:
std::vector<T> data; // e.g. 3x2 array { 0, 1, 2, 3, 4, 5 }
std::vector<size_t> sizes; // e.g. 3x2 array { 3, 2 }
std::vector<size_t> strides; // e.g. 3x2 array { 1, 3 }
};
那么您就拥有了您想要的所有灵活性 - 无需停留在 3D 上!
例如,data
3x2 数组的向量可以是前 6 个自然数,sizes
向量可以是{ 3, 2 }
strides 数组{ 1, 3 }
:在一行(其中有 2 个)中,元素彼此相邻,以增加您需要的行向前移动 3 个位置。
在一般的n维情况下,您可以创建一个at()
将向量(或initializer_list
)作为位置参数的运算符,对应于该位置的偏移量是其与 的内积strides
。
如果你不想从头开始编程,那么像Blitz++这样的库已经提供了这个功能。
推荐阅读
- azure - 在 Azure Active Directory 中预授权应用程序:对其他应用程序隐藏范围
- html - 无法居中和右对齐引导程序 4
- python - 如何查看鼠标点击是否在python中的乌龟上
- php - 合并共享相同 id 的数组
- python - 带有 pandas.read_excel 的 TypeError
- r - 我可以修复这个递归函数以使调用不深吗?
- c++ - 为什么使用 std::sort() 对升序数组(1~100,000)进行排序比仅使用 for 循环 100,000 次要快
- pycharm - PyCharm 的 anaconda 插件是什么?
- angular - MaterialModule 在某些模块中不起作用:'mat-card' 不是已知元素
- javascript - highcharts-vue 给出关于 highcharts HTML 元素的错误