簡體   English   中英

使用C ++ mex函數在Matlab中獲取double類型的輸出

[英]Getting output of type double in matlab using C++ mex Function

 #define E_OUT plhs[1]      
 double *E;
 double error[training_epochs];
 double err;

 int size_err1 = mxGetM(IN_training_epochs);
 int size_err2 = mxGetN(IN_training_epochs);   

 Dim1 = mxGetScalar(IN_training_epochs);
 Dim2 = 1;
 mexPrintf("Erro_Rows_numb = %d.\n", Dim1);
 mexPrintf("Error_Collums_numb = %d.\n", Dim2);
 E_OUT = mxCreateDoubleMatrix(Dim1, Dim2, mxREAL);
 E = mxGetPr(E_OUT); // getting the value of data to which E_OUT points at

 for(int epoch=0; epoch<training_epochs; epoch++)
  {
     err = 0;

        for(int i=0; i<sizeTrain_X2; i++)

        {     

     rbm.contrastive_divergence(&train_X[sizeTrain_X2*i],       learning_rate, k);
     rbm.reconstruct(&train_X[sizeTrain_X1*i], reconstructed_X[i]);

         for (int j=0; j< n_visible; j++)
          {             
           err += pow(train_X[n_hidden*i+j] - reconstructed_X[i][j],2);
          }  
         }
          error[epoch] = err; 
        }

從上面的代碼中,我一直在從我的RBM輸入矩陣計算重構的誤差,我需要使用mexFunction在matlab中檢索它。 但仍然在如何將變量錯誤中的已存儲數據指向plhs [1]上苦苦掙扎。

您似乎缺少的兩件事是:

plhs[0] = mxCreateDoubleMatrix(Dim1, Dim2, mxREAL);

c中的數組索引為0,因此對於返回的第一項應為plhs [0]。 要從錯誤中復制數據:

memcpy(mxGetPr(plhs[0]), error, Dim1*sizeof(double));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM