Я пытаюсь написать обертку вокруг gmm_full
и gmm_diag
, чтобы они были mvnorm_distribution
.Мне нужна эта конкретная настройка, потому что я имею дело с входным файлом и хотел бы, чтобы все работало более или менее так же, как std::*_distribution
s.У меня есть оболочка, и она работает так, как мне хотелось бы, но мне трудно заполнить arma::mat
с помощью любого из std
алгоритмов.По сути, у меня есть что-то вроде этого:
arma::vec gen() {
// gmm_full model initilization
return model.generate();
}
void main() {
arma::mat m(dim, N);
std::generate(m.begin_col(0), m.end_col(N-1), gen);
}
До сих пор я понял, что либо std::generate
, либо m.being_col()
не работают, как я ожидал.Я думал, что я получу вектор и смогу заполнить его, или это то, что сделал бы std::generate
, но, очевидно, это не так.Я вижу в примере, что мне нужно разыменовать столбец, но тогда я не могу сделать это на std::generate
.У меня есть std::fill
и std::transform
, но пока у меня нет успеха.
Одним из решений было бы написать класс генератора и передать каждое значение одно за другим, но тогда это не то, чего я действительно хочу.Мне было интересно, если кто-нибудь может мне помочь с этим.Я также знаю о model.generate(N)
, но я бы хотел обернуть дистрибутив и использовать его как другие std::*_distribution
s, так что это не решило бы мою проблему, или это не так, и я не знаю, как использоватьэто.
PS Это технически продолжение этого вопроса , который я задавал ранее.