我想存储某种距离矩阵(2D),其中每个条目都有一些替代(不同的坐标)。所以我想访问距离,例如x = 1,其中x_alt = 3,y = 3,y_alt = 1,查看带有数组[1] [3] [3] [1]的4维多阵列。< / p>
需要注意的重要事项如下:2个最内部的数组/向量对于外部数据的不同值没有相同的大小。
在第一个初始化步骤之后,我计算值,不再需要修改!
使用stl-vectors很容易实现这一点:
vector<vector<vector<vector<double> > > >`extended_distance_matrix;
我可以在外部2个维度上动态迭代,并且只填充内部2维度的替代项(例如使用push_back())。
问题:
感谢您的任何意见!
的Sascha
PS:提升文档对我没有帮助。也许可以使用multi_array_ref将已经大小的数组放入整个4D结构中?
修改 目前我正在考虑另一种方法:扁平化替代方案 - &gt;一个更大的矩阵,具有替代方案之间的所有距离。然后我只需要计算每个节点的备选数量,建立前缀总和(它描述矩阵位置/移位),然后可以两步访问信息。
但我的问题仍然存在。
答案 0 :(得分:2)
听起来你需要:
multi_array<ublas::matrix<type>,2>
答案 1 :(得分:0)
Boost.MultiArray处理连续的内存(逻辑上以多维度排列),因此很难在内部维度中添加元素。 MultiArrays可以动态调整大小,例如在任何维度中添加元素,但这是一项代价高昂的操作,几乎肯定需要(内部)重新分配和复制。
由于这一要求,MultiArray不是最佳选择。但是根据你所说的看起来,这两者的组合对你来说是合适的。
boost::multi_array<std::vector<std::vector<type>>, 2> data
非常好的是索引接口不会相对于boost::multi_array<type, 4>
而改变。例如,data[1][2][3][4]
仍然有意义。
我不知道你的帖子如何处理内部维度,但使用它甚至有意义:
boost::multi_array<boost::multi_array<type>, 2>, 2> data
在任何情况下,除非你真的需要做线性代数,否则我会远离boost::ublas::array
,或者如果type
是数字,则最多使用它作为内部数组。 boost::multi_array<boost::ublas::array<type>, 2> data
在另一个答案中提及。