首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用RcppArmadillo将距离矩阵的对角线强制为零?

如何用RcppArmadillo将距离矩阵的对角线强制为零?
EN

Stack Overflow用户
提问于 2014-03-13 04:10:38
回答 1查看 752关注 0票数 4

我有以下Rcpp/RcppArmadillo函数,它计算矩阵中的相关距离

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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获取它之后,我可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d <- cordiss(matrix(rnorm(1000),ncol=10))

但是,我在对角线上得到了非零值(因为我猜测机器的精度?),而我确实需要将这些数字设置为零,以便进一步处理距离矩阵。这是矩阵型的问题吗?我如何解决这个问题,而不必在事后(在Armadillo或R中)将对角线“手动”设置为零,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
diag(d) <- 0 

实际上,我想使用一个类似的函数来计算两个不同的矩阵之间的距离,对于这两个矩阵,我无法预测矩阵的列将在哪里相等,谢谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2014-03-13 05:52:16

不可能保证零,因为使用非整数数字的算法的任何实现实际上都使用这些数字的http://en.wikipedia.org/wiki/Floating_point

您最好的选择是手动将对角线设置为零,您可以通过.diag()在Armadillo中这样做。例如,output.diag().zeros()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22378246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文