我想存儲某種距離矩陣(2D),其中每個條目都有一些替代(不同的座標)。所以我想訪問距離,例如x_alt = 3和y = 3,y_alt = 1時x = 1,查看帶有數組[1] [3] [3] [1]的4維多陣列。Boost.MultiArray初學者:如何獲得具有動態內部數組大小的4D數組?
重要的是要注意以下幾點:2個最內部的數組/矢量對於不同的外部數值不同。
經過第一個初始化步驟後,我計算值,不需要更多的修改!
這應該是容易實現與使用STL-載體:
vector<vector<vector<vector<double> > > >`extended_distance_matrix;
其中i可以動態地遍歷外2點的尺寸和作爲我需要只填充儘可能多的替代的內2點的尺寸(例如與push_back())。
問題:
- 就是這種數據結構的定義可能與Boost.MultiArray的?怎麼樣?
- 使用Boost.MultiArray代替嵌套向量是個好主意嗎?性能(尤其是查找!(內存佈局))?易於使用?
感謝您的任何意見!
薩沙
PS:Boost文檔並沒有幫助我。也許我們可以使用multi_array_ref將已經大小的數組放入整個4D結構中?
編輯: 目前,我正在考慮的另一種方法:扁平化的替代品 - >所有的替代品之間的距離更大的一個矩陣。然後,我只需要計算每個節點的選項數量,建立前綴和(它描述了矩陣的位置/移位),然後可以以兩步方式訪問信息。
但我的問題仍然存在。
我基本上有同樣的問題。你還記得你最終使用的是什麼嗎?質疑Boost.MultiArray是否是4D結構的好主意。 (我知道這是近5年前...但任何建議表示讚賞。) – snd 2015-08-22 09:04:07
@snd - 不知道是否爲時已晚,但Anycorn建議的基本正確。你將初始化一個二維數組的二維數組(如果你有'ublas :: matrix> my4D(ySize,y_altSize)'''''')。然後,當你計算出每個內部矩陣的正確大小時,你可以調用'my4D(yIndex,y_altIndex).resize(xSize,x_altSize);' –
NoseKnowsAll
2015-10-16 16:00:27
@snd如果你可以計算出陣列中每個維數的大小初始化它們,然後你應該使用'boost :: multi_array my4D(boost :: extents [xSize] [x_altSize] [ySize] [y_altSize]);'並沿着找到的指南[here](http:// www .boost.org/DOC /庫/ 1_59_0 /庫/的multi_array/DOC/user.html)。由於數據局部性,這應該比上述方法快得多。 –
NoseKnowsAll
2015-10-16 16:04:55