是否可以将std ::函数应用于特征矩阵的每个元素

Is there a way to apply a std::function to each element of an EIGEN matrix?

本文关键字:元素 特征 应用于 std 函数 是否      更新时间:2023-10-16

我有一个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));
    }
}