Лямбда-функция поэлементно в собственных - PullRequest
0 голосов
/ 26 июня 2018

Это комбинация следующих предыдущих вопросов: Применение функции ко всем элементам матрицы Eigen и Установка коэффициентов матрицы Eigen :: Matrix в соответствии с произвольным распределением . В основном я пытаюсь сгенерировать собственную матрицу с коэффициентами, выбранными из гауссовского распределения.

Вот мой код для этого (метод статического класса), который возвращает довольно загадочное сообщение об ошибке:

matrix_eig EigenUtil::GaussianNoise(size_t rows, size_t cols,
                                    float mean, float std) {
  matrix_eig m(rows, cols);
  std::mt19937 rng;
  std::normal_distribution<float> nd(mean, std);
  auto sampler = [&]() { return nd(rng); };
  return matrix_eig::Zero(rows, cols).unaryExpr(sampler);
}

, который возвращает ошибку: ошибка:

no type named 'type' in 'std::__1::result_of<(lambda at eigen_util.cpp:101:18) (const float &)>'
  typedef typename std::result_of<T>::type type1;

1 Ответ

0 голосов
/ 27 июня 2018

Как заметил o11c, это действительно нулевое выражение, и почти точно такой же пример есть в doc . Я скопировал это для удобства:

#include <Eigen/Core>
#include <iostream>
#include <random>
using namespace Eigen;
int main() {
  std::default_random_engine generator;
  std::poisson_distribution<int> distribution(4.1);
  auto poisson = [&] () {return distribution(generator);};
  RowVectorXi v = RowVectorXi::NullaryExpr(10, poisson );
  std::cout << v << "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...