将 Eigen::matrixXd 转换为 Double
conversion of Eigen::matrixXd to Double
我一直在尝试在 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
函数,然后 return 另一个矩阵作为结果。
我一直在尝试在 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
函数,然后 return 另一个矩阵作为结果。