本征中的Lambda函数逐元素

时间:2018-06-26 20:36:42

标签: c++ eigen eigen3

这是以下先前问题的组合:Apply function to all Eigen matrix elementSet coefficients of an Eigen::Matrix according an arbitrary distribution。基本上,我试图生成一个特征矩阵,并从高斯分布中采样其系数。

这是我执行此操作的代码(静态类方法),它返回一个相当隐秘的错误消息:

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 :(得分:3)

正如o11c所注意到的,这确实是一个null表达式,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";
}