如何解决有没有办法在多维向量中切换维度顺序?
我有一个 3D 矢量,我希望能够选择将哪个维度绘制为另一个维度的函数。
到目前为止,我都是手动执行此操作:我创建了第二个 3D 矢量并相应地重新组织了数据。这个解决方案不是很实用,因为我每次想切换维度时都需要切换索引(在嵌套循环内)...
有更好/更清洁的解决方案吗?
谢谢。
解决方法
C++ 不提供多维容器,原因与 std::vector
之类的容器不提供标准 operator+
etc 相同。:没有适合每个人需求的标准(在 +
运算符的情况下,这可能是串联、逐元素添加、增加维数,谁知道)。如果你选择一个类而不是一个向量
<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!
例如,3x2 数组的 data
向量可以是前 6 个自然数,sizes
向量可以是 { 3,2 }
,步幅数组 { 1,3 }
:在一行(其中有 2 个)元素彼此相邻,要增加行,您需要向前移动 3 个位置。
在一般的 n 维情况下,您可以创建一个 at()
运算符,该运算符将向量(或 initializer_list
)作为位置参数,并且偏移量对应于该位置是其与 strides
的内积。
如果您不想从头开始编程,那么 Blitz++ 之类的库已经提供了此功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。