R-在Rcpp中存储距离矩阵

贾克

我很难弄清楚如何在中存储距离矩阵Rcpp

让我们想象一下,我想将以下函数存储在n*n个人的距离矩阵中sum由于不确定如何在中进行运算,所以不对进行平方)rcpp

distxy = function(x,y) sum (x - y) 

在此示例中,我想成对比较3个人

      [,1] [,2] [,3] [,4]
[1,]   24   24   22   20
[2,]   21   24   30   20
[3,]   44   34   41   13

R我会通过这样的矩阵循环功能

mat = matrix(0, nrow(d), nrow(d))

  len = nrow(d)
  mat = matrix(0, len, len)

  for(j in 1:len){
    for(i in 1:len){
      mat[j,i] = distxy( d[j,], d[i,] ) 
    }
  }

并得到(我可以平方结果,但这在这里并不重要)

     [,1] [,2] [,3]
[1,]    0   -5  -42
[2,]    5    0  -37
[3,]   42   37    0

我在做同样的事时遇到麻烦 rcpp

到目前为止,我取得的成就是

// [[Rcpp::export]]
NumericVector FunCpp(NumericMatrix x) {
  int nrow = x.nrow();
  NumericMatrix out(nrow);

  for (int i = 0; i < nrow; i++) {
    for (int j = 0; j < nrow; j++) { 
      out[i,j] = sum( x(i,_) - x(j,_) ) ; 
    }
  }
  return out;
}

但是距离矩阵是不正确的。任何想法 ?

d = rbind(c(24, 24, 22, 20), 
      c(21, 24, 30, 20), 
      c(44, 34, 41, 13))
努尔塞尔

您的Rcpp代码中有两个语法错误:

  • 返回aNumericVector而不是aNumericMatrix
  • 使用operator[]由两个维度指数(out[i,j]

这是一个清理的版本:

#include <Rcpp.h>

inline double distxy(Rcpp::NumericVector x, Rcpp::NumericVector y) {
    return Rcpp::sum(x - y);
}

// [[Rcpp::export]]
Rcpp::NumericMatrix FunCpp(Rcpp::NumericMatrix x) {
    int nrow = x.nrow();
    Rcpp::NumericMatrix out(nrow);

    for (int i = 0; i < nrow; i++) {
        for (int j = 0; j < nrow; j++) { 
            out(j, i) = distxy(x.row(j), x.row(i)); 
        }
    }

    return out;
}

针对您的R函数进行测试,

m <- matrix(
    c(24, 24, 22, 20,
      21, 24, 30, 20,
      44, 34, 41, 13),
    nrow = 3, byrow = TRUE
)

all.equal(FunR(m), FunCpp(m))
#[1] TRUE

至于平方,你可以使用std::pow里面distxy

return std::pow(Rcpp::sum(x - y), 2);

或内部FunCpp循环中的内部:

out(j, i) = std::pow(distxy(x.row(j), x.row(i)), 2);

distxy <- function(x,y) sum(x - y) 

FunR <- function(d) {
    len <- nrow(d)
    mat <- matrix(0, len, len)

    for(j in 1:len){
        for(i in 1:len){
            mat[j,i] <- distxy(d[j,], d[i,]) 
        }
    }
    mat
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R比较特征以创建距离矩阵

来自分类Dev

从多个输入矩阵构造R中的距离矩阵

来自分类Dev

交错存储在R中的列表中的矩阵行

来自分类Dev

在SQLite中存储矩阵数据以在R中快速检索

来自分类Dev

R中数据帧对的距离矩阵

来自分类Dev

如何保护R中的矩阵不受Rcpp的影响?

来自分类Dev

R中的自制距离矩阵

来自分类Dev

如何从R中的一个回路的距离测量中得出距离矩阵?

来自分类Dev

将成对距离转换为R中的距离矩阵

来自分类Dev

自定义替换矩阵,用于R中的编辑距离

来自分类Dev

素食主义者中的R大距离矩阵

来自分类Dev

RCPP:我的距离矩阵程序比包中的函数慢

来自分类Dev

使用R仅读取和存储矩阵中的选定列

来自分类Dev

使用Rcpp在R中处理矩阵是否有限制?

来自分类Dev

R类间距离矩阵

来自分类Dev

如何在R中的距离矩阵旁边绘制树状图?

来自分类Dev

用值子集R中的距离矩阵

来自分类Dev

交错存储在R中的列表中的矩阵行

来自分类Dev

使用R中的Cutree从距离矩阵中提取组

来自分类Dev

R中数据帧对的距离矩阵

来自分类Dev

自定义替换矩阵,用于R中的编辑距离

来自分类Dev

在R中创建距离矩阵的列表

来自分类Dev

R中距离矩阵的计算时间过长

来自分类Dev

从R中的距离矩阵中提取对角线

来自分类Dev

如何从R中的距离矩阵生成排序图

来自分类Dev

依次提取r中矩阵行中的每两个元素来计算欧氏距离

来自分类Dev

将 R 中的键/值对字典存储在矩阵或向量中

来自分类Dev

R中的COSH距离

来自分类Dev

用 R 过滤距离矩阵