나는 에 클래스 Histogram
을 만들었는데,이 클래스는 Boost 1.54의 boost::accumulators::accumulator_set
에 대한 래퍼로 사용된다.두 개의 boost :: accumulators :: accumulator_set이 서로 간섭한다
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))) {
}
이 히스토그램 (main-metropolis.cpp
에서 do_iterations()
)를 사용하는 코드가 시작 : Histogram.cpp
에서 다음
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.hpp
파일에서 그 라인이다 다음과 같습니다.
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이지만 데이터는 첫 번째와 마지막 bin에 오버 플로우 쓰레기통에 배포됩니다 내가 라인을 바꿀 경우
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
이 첫 번째 것이 깨지게할까요? 당신이 the code를 탐색 할 때이 작업을 계속하기 위해 지금 내 자신의 히스토그램 구현을 구축하기 때문에
개정 d3081a1ef7
을 사용하십시오.
내가 부스트와 함께 테스트를했습니다 상황에 대해 다른 무엇을 실현하는 데 도움이
희망 문제의 코드. 누적 기가 올바른 샘플을 가져와야합니다. 그 중 하나가 작동하고 합리적인 히스토그램을 보여주기 때문입니다. 'template'는 무엇을합니까? –
그 태그에 대해 죄송합니다. 그것은 잠재적 인 문제를 진단해야한다는 아이디어의 남은 것입니다. 그것은 불필요한 것으로 밝혀졌습니다.태그를 무시하십시오 :) – sehe
이 기능에 이름이 있습니까? 나는 C++을 배우면서이 책에 대해 읽고 싶습니다. - 그래서 내 코드의 문제가 다른 복잡도의 어딘가에서 생성 된 것 같습니다. –