我在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++。 - 所以我的代码中的问题似乎在另一个复杂的地方产生了? –