【发布时间】:2014-03-13 12:10:38
【问题描述】:
我有以下 Rcpp/RcppArmadillo 函数,它计算矩阵中的相关距离
#include <RcppArmadillo.h>
using namespace Rcpp;
// [[Rcpp::export]]
arma::mat cordiss(NumericMatrix X){
int nX = X.nrow(), kX = X.ncol();
arma::mat XX(X.begin(), nX, kX, false);
arma::mat output = (1 - arma::cor(XX.t(), XX.t()))/2;
return output.t();
}
使用 Rcpp::sourceCpp 采购后,我可以执行以下操作:
d <- cordiss(matrix(rnorm(1000),ncol=10))
但是,我在对角线上得到非零值(因为我猜测机器精度?),而我确实需要将这些数字设置为零以进一步处理距离矩阵。这是矩阵类型的问题吗?我该如何解决这个问题,而不必事后将对角线“手动”设置为零(在犰狳或 R 中),例如:
diag(d) <- 0
确实,我想使用类似的函数来计算两个不同矩阵之间的距离,我无法预测矩阵的列在哪里相等 感谢您的帮助!
【问题讨论】: