gpt4 book ai didi

c++ - 使用 C++ Eigen 和 matlab mexFunction 的矩阵乘法问题

转载 作者:行者123 更新时间:2023-11-28 05:53:16 25 4
gpt4 key购买 nike

    // computing the matrix operation here
// resultEigen = Input matrix
// result1Eigen = hidden bias
// result2Eigen = visible bias
// result3Eigen = weight matrix

MatrixXd H;
MatrixXd V;
double well[36];
Map<MatrixXd>( well, H.rows(), H.cols() ) = H;
H = resultEigen * result3Eigen + result1Eigen;
mexPrintf("H is here\n");
for (int i=0; i<36; i++)
{

mexPrintf("%d\n",H);
}

mexPrintf("\n");

我需要为我的 RBM 构建一个重构函数,因为直接矩阵乘法可以获得更好的结果,我一直在引用特征库来解决我的问题,但我遇到了一些困难。当运行上面的代码时,我最终得到了 H 矩阵的单个值,我想知道为什么!

此外,用于计算 H 的参数已启动如下:

         double *data1 = hbias;
Map<VectorXd>hidden_bias(data1,6,1);
VectorXd result1Eigen;
double result1[6];
result1Eigen = hidden_bias.transpose();
Map<VectorXd>(result1, result1Eigen.cols()) = result1Eigen;
// next param
double *data2 = vbias;
Map<VectorXd>visible_bias(data2,6,1);
VectorXd result2Eigen;
double result2[6];
result2Eigen = visible_bias.transpose();
Map<VectorXd>(result2, result2Eigen.cols()) = result2Eigen;
// next param
double *data3 = w;
Map<MatrixXd>weight_matrix(data3,n_visible,n_hidden);
MatrixXd result3Eigen;
// double result3[36];

mxArray * result3Matrix = mxCreateDoubleMatrix(n_visible, n_hidden, mxREAL );
double *result3=(double*)mxGetData(result3Matrix);
result3Eigen = weight_matrix.transpose();
Map<MatrixXd>(result3, result3Eigen.rows(), result3Eigen.cols()) = result3Eigen

最后,我还面临使用 std::cout 从 mexFunction 内部打印数据的问题。感谢您的任何提示。

最佳答案

问题出在打印代码中,应该是:

mexPrintf("%d\n",H(i));

那么,就不需要复制 vector 和矩阵了。例如,result1是无用的,因为您可以获得指向存储在 result1Eigen 中的数据的原始指针使用 result1Eigen.data() .同样,您可以直接分配 weight_matrix.transpose()Map<MatrixXd>(result3,...) ,我看不出 well 的目的.

最后,如果在编译时确实知道大小,那么最好使用 Matrix<double,6,1>而不是 VectorXdMatrix<double,6,6>而不是 MatrixXd .您可以期待显着的加速。

关于c++ - 使用 C++ Eigen 和 matlab mexFunction 的矩阵乘法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34747309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com