enhance fmap to add new parameter, time
This commit is contained in:
parent
e6e8a68c09
commit
83ee7f5f1e
@ -33,20 +33,21 @@ static void Exec() {
|
|||||||
|
|
||||||
std::ifstream fmap_st {args::get(param::fmap)};
|
std::ifstream fmap_st {args::get(param::fmap)};
|
||||||
Enforce(!!fmap_st, "fmap path is invalid");
|
Enforce(!!fmap_st, "fmap path is invalid");
|
||||||
const auto fmap = ReadMatrix<uint32_t>(fmap_st);
|
const auto fmap = ReadTensor3<uint32_t>(fmap_st);
|
||||||
Enforce(fmap.size() > 0, "empty fmap");
|
Enforce(fmap.size() > 0 && fmap[0].size() > 0, "empty fmap");
|
||||||
for (auto& idxs : fmap) {
|
for (auto& fmap_t : fmap) {
|
||||||
Enforce(idxs.size() > 0, "fmap has empty item");
|
Enforce(fmap_t.size() == fmap[0].size(), "fmap is broken");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t t = 0; t < aprobs.size(); ++t) {
|
for (size_t t = 0; t < aprobs.size(); ++t) {
|
||||||
Enforce(aprobs[t].size() <= fmap.size(), "unmatched aprobs and fmap");
|
const auto tidx = t % fmap.size();
|
||||||
for (size_t c = 0; c < fmap.size(); ++c) {
|
for (size_t c = 0; c < fmap[tidx].size(); ++c) {
|
||||||
double sum = 0;
|
double sum = 0;
|
||||||
for (auto i : fmap[c]) {
|
for (auto i : fmap[tidx][c]) {
|
||||||
|
Enforce(i < aprobs[t].size(), "aprob has no enough columns");
|
||||||
sum += aprobs[t][i];
|
sum += aprobs[t][i];
|
||||||
}
|
}
|
||||||
std::cout << sum / fmap[c].size() << ' ';
|
std::cout << sum / fmap[tidx][c].size() << ' ';
|
||||||
}
|
}
|
||||||
std::cout << '\n';
|
std::cout << '\n';
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ inline void Enforce(bool eval, const std::string& msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::vector<std::vector<T>> ReadMatrix(std::istream& st) noexcept {
|
auto ReadMatrix(std::istream& st) noexcept {
|
||||||
std::vector<std::vector<T>> ret;
|
std::vector<std::vector<T>> ret;
|
||||||
|
|
||||||
std::string line;
|
std::string line;
|
||||||
@ -28,6 +28,23 @@ std::vector<std::vector<T>> ReadMatrix(std::istream& st) noexcept {
|
|||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
template <typename T>
|
||||||
|
auto ReadTensor3(std::istream& st) noexcept {
|
||||||
|
std::vector<std::vector<std::vector<T>>> ret(1);
|
||||||
|
|
||||||
|
std::string line;
|
||||||
|
while (std::getline(st, line)) {
|
||||||
|
if (line == "----") {
|
||||||
|
ret.push_back({});
|
||||||
|
} else {
|
||||||
|
std::istringstream sst {line};
|
||||||
|
ret.back().emplace_back(std::istream_iterator<T> {sst},
|
||||||
|
std::istream_iterator<T> {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ---- MP4 utilities
|
// ---- MP4 utilities
|
||||||
|
@ -27,17 +27,16 @@ ValueFlag<std::string> fmap {
|
|||||||
static void Exec() {
|
static void Exec() {
|
||||||
std::ifstream fmap_st {args::get(param::fmap)};
|
std::ifstream fmap_st {args::get(param::fmap)};
|
||||||
Enforce(!!fmap_st, "fmap path is invalid");
|
Enforce(!!fmap_st, "fmap path is invalid");
|
||||||
const auto fmap = ReadMatrix<uint32_t>(fmap_st);
|
const auto fmap = ReadTensor3<uint32_t>(fmap_st);
|
||||||
Enforce(fmap.size() > 0, "empty fmap");
|
Enforce(fmap.size() > 0 && fmap[0].size() > 0, "empty fmap");
|
||||||
for (auto& idxs : fmap) {
|
for (auto& fmap_t : fmap) {
|
||||||
Enforce(idxs.size() > 0, "fmap has empty item");
|
Enforce(fmap_t.size() == fmap[0].size(), "fmap is broken");
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t feat;
|
for (size_t feat, t = 0; std::cin >> feat; ++t) {
|
||||||
while (std::cin >> feat) {
|
const auto tidx = t % fmap.size();
|
||||||
Enforce(feat < fmap.size(), "feat overflow");
|
Enforce(feat < fmap[tidx].size(), "feat overflow");
|
||||||
|
for (const auto idx : fmap[tidx][feat]) {
|
||||||
for (const auto idx : fmap[feat]) {
|
|
||||||
std::cout << idx << ' ';
|
std::cout << idx << ' ';
|
||||||
}
|
}
|
||||||
std::cout << '\n';
|
std::cout << '\n';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user