diff --git a/conv/aprob_fprob.cc b/conv/aprob_fprob.cc index 4babb93..df3a452 100644 --- a/conv/aprob_fprob.cc +++ b/conv/aprob_fprob.cc @@ -17,9 +17,6 @@ HelpFlag help { parser, "help", "display this menu", {'h', "help"}, }; -ValueFlag smap { - parser, "path", "step map file path", {"smap"}, -}; ValueFlag fmap { parser, "path", "feature map file path", {"fmap"}, }; @@ -41,13 +38,30 @@ static void Exec() { for (size_t t = 0; t < aprobs.size(); ++t) { const auto tidx = t % fmap.size(); + const auto bnum = aprobs[t].size(); for (size_t c = 0; c < fmap[tidx].size(); ++c) { - double sum = 0; - for (auto i : fmap[tidx][c]) { - Enforce(i < aprobs[t].size(), "aprob has no enough columns"); - sum += aprobs[t][i]; + const auto& blocks = fmap[tidx][c]; + + double positive = 0, negative = 0; + for (uint32_t b = 0; b < aprobs[t].size(); ++b) { + if (blocks.end() != std::find(blocks.begin(), blocks.end(), b)) { + positive += aprobs[t][b]; + } else { + negative += aprobs[t][b]; + } } - std::cout << sum / fmap[tidx][c].size() << ' '; + if (blocks.size() > 0) { + positive /= blocks.size(); + } else { + positive = 1; + } + if (bnum > blocks.size()) { + negative /= bnum - blocks.size(); + } else { + negative = 0; + } + const auto prob = positive * (1-negative); + std::cout << prob << ' '; } std::cout << '\n'; } diff --git a/conv/common.hh b/conv/common.hh index e635a68..a36b659 100644 --- a/conv/common.hh +++ b/conv/common.hh @@ -42,6 +42,7 @@ auto ReadTensor3(std::istream& st) noexcept { std::istream_iterator {}); } } + if (ret.back().empty()) ret.pop_back(); return ret; } diff --git a/conv/feat_dcode.cc b/conv/feat_dcode.cc index 354bec6..a312029 100644 --- a/conv/feat_dcode.cc +++ b/conv/feat_dcode.cc @@ -30,7 +30,7 @@ ValueFlag fnum { static void Exec() { const auto fnum = args::get(param::fnum); - Enforce(fnum > 0, "fc-num must be greater than 0"); + Enforce(fnum > 0, "fnum must be greater than 0"); std::ifstream smap_st {args::get(param::smap)}; Enforce(!!smap_st, "smap path is invalid"); diff --git a/gen/smap.cc b/gen/smap.cc index 9ebaf88..8e0c439 100644 --- a/gen/smap.cc +++ b/gen/smap.cc @@ -20,8 +20,8 @@ HelpFlag help { ValueFlag dur { parser, "100", "duration", {"dur"}, 100, }; -ValueFlag fcnum { - parser, "50", "number of feature code alphabet", {"fc-num"}, 50, +ValueFlag fnum { + parser, "50", "number of feature code alphabet", {"fnum"}, 50, }; ValueFlag branch { parser, "2", "number of branch", {"branch"}, 2, @@ -51,7 +51,7 @@ Flag inc_time { size_t Step(size_t t, size_t c, size_t b) { - const auto fcnum = args::get(param::fcnum); + const auto fnum = args::get(param::fnum); size_t ret; switch (args::get(param::algo)) { @@ -60,7 +60,7 @@ size_t Step(size_t t, size_t c, size_t b) { if (param::inc_time) { ret += t; } - return ret%fcnum; + return ret%fnum; default: assert(false); @@ -70,7 +70,7 @@ size_t Step(size_t t, size_t c, size_t b) { void Exec() { for (size_t t = 0; t < args::get(param::dur); ++t) { - for (size_t c = 0; c < args::get(param::fcnum); ++c) { + for (size_t c = 0; c < args::get(param::fnum); ++c) { for (size_t b = 0; b < args::get(param::branch); ++b) { std::cout << Step(t, c, b) << ' '; }