我在my code中創建了一個類Histogram
,該類用作Boost 1.54的boost::accumulators::accumulator_set
的包裝。似乎重要的是我的問題的事物是從Histogram.hpp
文件的那些行:兩個boost :: accumulators :: accumulator_set相互干擾
using namespace boost::accumulators;
class Histogram {
public:
Histogram(int bins, size_t cache);
accumulator_set<double,
features<tag::min, tag::max, tag::mean, tag::density>> acc;
};
然後在Histogram.cpp
我有構造函數:
Histogram::Histogram(int bins, size_t cache)
: acc(accumulator_set<double,
features<tag::min, tag::max, tag::mean, tag::density>>(
tag::density::num_bins = bins,
tag::density::cache_size = std::min(cache, MAX_CACHE_ENTRIES))) {
}
使用這個直方圖(do_iterations()
在main-metropolis.cpp
)的代碼開始與以下內容:
Histogram position_histogram{settings.position_hist_bins, settings.time_sites * settings.iterations};
//Histogram action_histogram{settings.action_hist_bins, settings.iterations};
它的工作原理就像我期望當我用第二行d eactivated。我的模擬產生一些數據點,將其放入Histogram::acc
,讓我以後提取它:
-2.86958 0
-2.37393 0.0002
-1.87829 0.0071
-1.38265 0.06621
-0.887001 0.23902
-0.391356 0.33247
0.104288 0.2342
0.599932 0.08449
1.09558 0.02843
1.59122 0.00775
2.08687 0.00012
2.58251 1e-05
# Min -2.37393
# Max 2.58251
# Mean -0.0809983
然後我激活線,position_histogram
作品在一個非常奇怪的方式。該箱都爲零,但數據被分配到溢出箱在第一和最後一個窗口:
0 0.57785
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0.42215
# Min -2.37393
# Max 2.58251
# Mean -0.0809983
如果我換行,這是action_histogram
打破。所以第二個總是打破第一個。爲什麼第二個Histogram
的初始化以及第二個accumulator_set
會導致第一個中斷?
請使用修訂d3081a1ef7
當您瀏覽the code因爲我建立我自己的直方圖實現由現在繼續工作。
我添加鏈接到源代碼在問題中。累加器應該得到正確的樣本,因爲其中一個工作並顯示合理的直方圖。 「template'做了什麼? –
對不起,關於該標籤。這是我不得不診斷潛在問題的一個想法的遺留問題。結果是沒有必要的。忽略標籤:) – sehe
此功能是否有名稱?我想了解它,因爲我現在正在學習C++。 - 所以我的代碼中的問題似乎在另一個複雜的地方產生了? –