c++ - Eigen::matrixXd 到 Double 的转换

标签 c++ eigen

我一直在尝试在 Eigen 库的帮助下重建输入到我用 C++ 编写的 RBM 程序的输入数据。但是为了将重建矩阵的矩阵元素保持在某个特定范围内,我需要对它们应用一个 sigmoid 函数。 当我这样做时,我得到一个转换错误,我不知道如何解决它。

这是我在头文件中计算的 Sigmoid 函数:

       double sigmoid(double x) 
            {
                return 1.0 / (1.0 + exp(-x));
            }

下面是我如何计算重建:

         MatrixXd V;
         double well[36];
         Map<MatrixXd>( well, V.rows(), V.cols() ) = V;
         V = sigmoid(H * result3Eigen.transpose() + onesmat*result2Eigen.transpose());

最后这里是我在编译代码时得到的错误信息:

        error C2664:'utils::sigmoid':cannot convert parameter 1 from 'Eigen::MatrixXd' 
        to 'double'

感谢您提供解决问题的任何提示。

最佳答案

如果你想对特征矩阵的每个元素应用一个函数,你可以使用 unaryExpr功能:

V = my_matrix.unaryExpr(&sigmoid);

这将对特征矩阵 my_matrix 的每个元素运行 sigmoid 函数,然后返回另一个矩阵作为结果。

关于c++ - Eigen::matrixXd 到 Double 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34787964/

相关文章:

c++ - 使用初始化列表作为参数时的歧义

c++ - 继承自虚类并在构造时指定

c++ - c语言实现密码安全的程序?

c++ - 如何在 linux 中将 conio.h 添加到 nvcc

c++ - 在 Cygwin 上执行的程序不报告抛出的异常

c++ - 在赋值中使用 block() 收缩具有 Eigen 的矩阵

r - 将 boost 多精度与 RcppEigen 结合使用

c++ - 如何复制特征矩阵

c++ - 使用 win32 API 在 C++ 中查找和替换文件中的字符串标记

c++ - 零四元数和任何 vector 的特征积不为零,这是一个错误吗?