【问题标题】:Translate C++ code into R code for data generating purposes将 C++ 代码转换为 R 代码以生成数据
【发布时间】:2020-09-02 04:36:08
【问题描述】:

我希望根据以下代码为我的硕士论文创建一些数据,但我只熟悉 R ,请对以下代码的作用或在 R 中的实现提供一些指导。


case 9: // generates a 20-dim affine space  in 100- dimensions
       dim=20;

       // allocate memory for the output
       plhs[0] = mxCreateDoubleMatrix(dim, num, mxREAL);
       data = mxGetPr(plhs[0]);

       para=new double*[20];
       for(i=0;i<20;i++)
        para[i]=new double[long(num)];

       for(i=0;i<20;i++)
        for(j=0;j<num;j++)
         para[i][j]=5.0*uni()-2.5;

       vectors=new double*[20];
       for(i=0;i<20;i++)
        vectors[i]=new double[dim];

       for(i=0;i<20;i++)
        for(j=0;j<dim;j++)
        {
          if(i==j)
           vectors[i][j]=1;
          else
           vectors[i][j]=0;//0.25*(uni()-0.125);
        }
         //vectors[i][j]=10*(uni()-0.5);

       //generate the figure
       for(i=0;i<num;i++)
       {
         for(j=0;j<dim;j++)
         {
           data[i*dim+j]=0;
           for(k=0;k<20;k++)
            data[i*dim+j]+=para[k][i]*vectors[k][j];
         }
       }
       mexPrintf("Generated %i data points of a 20-dimensional affine subspace in R^20\n",num);
       mexPrintf("The correct dimension of this submanifold is 20\n");

       for(i=0;i<20;i++)
        delete para[i];
       delete para;
       break;

num 是我想要生成的点数,dim 是维度,所以它们本质上是我的输入。

我编辑了我的帖子,因为我发现需要完整的代码才能获得正确的答案,对于给您带来的不便,我们深表歉意。

【问题讨论】:

  • 你看过Rcpp 包吗?这直接从 R 运行 C++ 代码。特别是如果您有更多 C++ 代码,这可能是值得的。
  • 我当然熟悉 Rcpp 包,但在这种情况下,我想将此代码翻译成 R 代码。

标签: c++ r translate


【解决方案1】:

这里有一个翻译,你可以试试

vectors <- matrix(nrow = 20,ncol = dim)
for (i in 1:20) {
    for (j in 1:dim) {
        vectors[i,j] <- ifelse(i==j,1,0)
    }
} 
for (i in 1:20) {
    for (j in 1:dim) {
        data[i*(dim-1+j)] <- 0
        for (k in 1:20) {
            data[i*(dim-1)+j] <- data[i*(dim-1)+j] + para[k,i]*vectors[k,j]
        }
    }
}

【讨论】:

  • 对不起,我编辑了我的原始帖子,但我觉得提供整个代码会让其他人更容易帮助我。
  • @SteliosKounis 抱歉我不知道mxCreateDoubleMatrixmxGetPrmexPrintf,因此不知道他们的翻译
猜你喜欢
  • 2012-04-25
  • 1970-01-01
  • 2014-02-11
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
相关资源
最近更新 更多