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

这是我在头文件中计算出的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函数,然后返回另一个矩阵作为结果。

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

10-13 07:46
查看更多