【发布时间】:2017-12-12 23:14:14
【问题描述】:
我有一个 Eigen::MatrixXd,我想通过逐个应用函数来修改它的所有元素。例如:
MatrixXd m = ...;
std::function<double(double)> f = ...
m1 = m.apply(f);
有没有办法达到这个结果?`
【问题讨论】:
我有一个 Eigen::MatrixXd,我想通过逐个应用函数来修改它的所有元素。例如:
MatrixXd m = ...;
std::function<double(double)> f = ...
m1 = m.apply(f);
有没有办法达到这个结果?`
【问题讨论】:
unaryExpr 模板成员函数使用调用运算符(函数指针、函子、lambda、std::function)获取任何内容并将其应用于矩阵的每个元素。请记住,矩阵不能有别名!
#include <functional>
#include <iostream>
#include <Eigen/Core>
double square(double x)
{
return x*x;
}
int main()
{
Eigen::MatrixXd m = Eigen::MatrixXd::Random(2,2);
std::cout << m << "\n";
std::function<double(double)> func = square;
m = m.unaryExpr(func);
std::cout << m << "\n";
}
【讨论】:
你可能总是用蛮力的方式来做这件事,这意味着在一个双循环中:
for (int j1; j1 < m.rows(); j1++){
for (int j2; j2 < m.cols(); j2++){
m(j1, j2) = f(m(j1, j2));
}
}
【讨论】: