将 Eigen::matrixXd 转换为 Double

conversion of Eigen::matrixXd to Double

本文关键字:Double 转换 matrixXd Eigen      更新时间:2023-10-16

我一直在尝试在特征库的帮助下重建提供给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);

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